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

JsonSchemaSerialization

The JSON Schema serialization context holding information about the current serialization.
using Microsoft.Runtime.CompilerServices; 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; [ThreadStatic] private static JsonSerializerSettings _currentSerializerSettings; public static SchemaType CurrentSchemaType { get { return _currentSchemaType; } private set { _currentSchemaType = value; } } public static JsonSerializerSettings CurrentSerializerSettings { get { return _currentSerializerSettings; } private set { _currentSerializerSettings = value; } } public static bool IsWriting { get { return _isWriting; } private set { _isWriting = value; } } public static string ToJson(object obj, SchemaType schemaType, IContractResolver contractResolver, Formatting formatting) { IsWriting = false; CurrentSchemaType = schemaType; JsonSchemaReferenceUtilities.UpdateSchemaReferencePaths(obj, false, contractResolver); IsWriting = false; CurrentSerializerSettings = new JsonSerializerSettings { ContractResolver = contractResolver }; string data = JsonConvert.SerializeObject(obj, formatting, CurrentSerializerSettings); CurrentSerializerSettings = null; CurrentSchemaType = SchemaType.JsonSchema; return JsonSchemaReferenceUtilities.ConvertPropertyReferences(data); } public static async Task<T> FromJsonAsync<T>(string json, SchemaType schemaType, string documentPath, Func<T, JsonReferenceResolver> referenceResolverFactory, IContractResolver contractResolver) { CurrentSchemaType = schemaType; T schema = JsonSchemaSerialization.FromJson<T>(json, contractResolver); IDocumentPathProvider documentPathProvider = schema as IDocumentPathProvider; if (documentPathProvider != null) documentPathProvider.DocumentPath = documentPath; JsonReferenceResolver jsonReferenceResolver = referenceResolverFactory(schema); IJsonReference jsonReference = schema as IJsonReference; if (jsonReference != null && !string.IsNullOrEmpty(documentPath)) jsonReferenceResolver.AddDocumentReference(documentPath, jsonReference); ConfiguredTaskAwaitable val = AwaitExtensions.ConfigureAwait(JsonSchemaReferenceUtilities.UpdateSchemaReferencesAsync(schema, jsonReferenceResolver, contractResolver), false); ConfiguredTaskAwaiter val2 = val.GetAwaiter(); if (!val2.get_IsCompleted()) { await val2; ConfiguredTaskAwaiter val3 = default(ConfiguredTaskAwaiter); val2 = val3; } val2.GetResult(); CurrentSchemaType = SchemaType.JsonSchema; return schema; } public static T FromJson<T>(string json, IContractResolver contractResolver) { IsWriting = true; CurrentSerializerSettings = new JsonSerializerSettings { ContractResolver = contractResolver, MetadataPropertyHandling = MetadataPropertyHandling.Ignore, ConstructorHandling = ConstructorHandling.Default, ReferenceLoopHandling = ReferenceLoopHandling.Serialize, PreserveReferencesHandling = PreserveReferencesHandling.None }; json = JsonSchemaReferenceUtilities.ConvertJsonReferences(json); T result = JsonConvert.DeserializeObject<T>(json, CurrentSerializerSettings); CurrentSerializerSettings = null; return result; } } }