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

SystemTextJsonUtilities

public static class SystemTextJsonUtilities
Utility methods for dealing with System.Text.Json.
using Namotion.Reflection; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Serialization; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace NJsonSchema.Generation { public static class SystemTextJsonUtilities { private sealed class SystemTextJsonContractResolver : DefaultContractResolver { private readonly dynamic _serializerOptions; public SystemTextJsonContractResolver(dynamic serializerOptions) { _serializerOptions = serializerOptions; } protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { object[] customAttributes = member.GetCustomAttributes(true); JsonProperty jsonProperty = base.CreateProperty(member, memberSerialization); bool flag = false; object obj = EnumerableExtensions.FirstAssignableToTypeNameOrDefault<object>((IEnumerable<object>)customAttributes, "System.Text.Json.Serialization.JsonIgnoreAttribute", 1); if (obj != null) { object obj2 = ObjectExtensions.TryGetPropertyValue<object>(obj, "Condition", (object)null); if (obj2 == null || obj2.ToString() == "Always") flag = true; } jsonProperty.Ignored = (flag || EnumerableExtensions.FirstAssignableToTypeNameOrDefault<object>((IEnumerable<object>)customAttributes, "System.Text.Json.Serialization.JsonExtensionDataAttribute", 1) != null); if (_serializerOptions.PropertyNamingPolicy != null) jsonProperty.PropertyName = (string)_serializerOptions.PropertyNamingPolicy.ConvertName(member.Name); dynamic val = EnumerableExtensions.FirstAssignableToTypeNameOrDefault<object>((IEnumerable<object>)customAttributes, "System.Text.Json.Serialization.JsonPropertyNameAttribute", 1); dynamic val2 = val != null; if ((val2 ? false : true) ? val2 : (val2 & !string.IsNullOrEmpty(val.Name))) jsonProperty.PropertyName = (string)val.Name; return jsonProperty; } } public static JsonSerializerSettings ConvertJsonOptionsToNewtonsoftSettings(dynamic serializerOptions) { JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings(); jsonSerializerSettings.ContractResolver = new SystemTextJsonContractResolver(serializerOptions); JsonSerializerSettings jsonSerializerSettings2 = jsonSerializerSettings; object obj = ((IEnumerable)serializerOptions.Converters).OfType<object>().FirstOrDefault((object c) => TypeExtensions.IsAssignableToTypeName(c.GetType(), "System.Text.Json.Serialization.JsonStringEnumConverter", 1)); if (obj == null) return jsonSerializerSettings2; bool camelCaseText = IsCamelCaseEnumNamingPolicy(obj); jsonSerializerSettings2.Converters.Add(new StringEnumConverter(camelCaseText)); return jsonSerializerSettings2; } private static bool IsCamelCaseEnumNamingPolicy(object jsonStringEnumConverter) { try { object obj = LegacyTypeExtensions.GetRuntimeFields(jsonStringEnumConverter.GetType()).FirstOrDefault((FieldInfo x) => x.FieldType.FullName == "System.Text.Json.JsonNamingPolicy")?.GetValue(jsonStringEnumConverter); return obj != null && obj.GetType().FullName == "System.Text.Json.JsonCamelCaseNamingPolicy"; } catch { return false; } } } }