<PackageReference Include="NJsonSchema" Version="9.10.69" />

JsonSchemaSerialization

The JSON Schema serialization context holding information about the current serialization.
using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using NJsonSchema.References; using System; using System.Threading.Tasks; namespace NJsonSchema.Infrastructure { public class JsonSchemaSerialization { [ThreadStatic] private static SchemaType _currentSchemaType; [ThreadStatic] private static bool _isWriting; public static SchemaType CurrentSchemaType { get { return _currentSchemaType; } private set { _currentSchemaType = value; } } public static bool IsWriting { get { return _isWriting; } private set { _isWriting = value; } } [Obsolete("This overload will be removed soon.")] public static string ToJson(object obj, SchemaType schemaType, IContractResolver contractResolver) { return ToJson(obj, schemaType, contractResolver, Formatting.Indented); } public static string ToJson(object obj, SchemaType schemaType, IContractResolver contractResolver, Formatting formatting) { IsWriting = false; CurrentSchemaType = schemaType; JsonSchemaReferenceUtilities.UpdateSchemaReferencePaths(obj, false, contractResolver); return JsonSchemaReferenceUtilities.ConvertPropertyReferences(JsonConvert.SerializeObject(obj, formatting, new JsonSerializerSettings { ContractResolver = contractResolver })); } public static async Task<T> FromJsonAsync<T>(string json, SchemaType schemaType, string documentPath, Func<T, JsonReferenceResolver> referenceResolverFactory, IContractResolver contractResolver) { IsWriting = true; CurrentSchemaType = schemaType; json = JsonSchemaReferenceUtilities.ConvertJsonReferences(json); JsonSerializerSettings settings = new JsonSerializerSettings { ContractResolver = contractResolver, MetadataPropertyHandling = MetadataPropertyHandling.Ignore, ConstructorHandling = ConstructorHandling.Default, ReferenceLoopHandling = ReferenceLoopHandling.Serialize, PreserveReferencesHandling = PreserveReferencesHandling.Objects }; T schema = JsonConvert.DeserializeObject<T>(json, settings); IDocumentPathProvider documentPathProvider; if ((documentPathProvider = (schema as IDocumentPathProvider)) != null) documentPathProvider.DocumentPath = documentPath; JsonReferenceResolver jsonReferenceResolver = referenceResolverFactory(schema); IJsonReference schema2; if ((schema2 = (schema as IJsonReference)) != null && !string.IsNullOrEmpty(documentPath)) jsonReferenceResolver.AddDocumentReference(documentPath, schema2); await JsonSchemaReferenceUtilities.UpdateSchemaReferencesAsync(schema, jsonReferenceResolver, contractResolver).ConfigureAwait(false); return schema; } } }