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;
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)
{
IEnumerable<Attribute> customAttributes = CustomAttributeExtensions.GetCustomAttributes(member, true);
JsonProperty jsonProperty = base.CreateProperty(member, memberSerialization);
bool flag = false;
Attribute attribute = EnumerableExtensions.FirstAssignableToTypeNameOrDefault<Attribute>(customAttributes, "System.Text.Json.Serialization.JsonIgnoreAttribute", 1);
if (attribute != null) {
object obj = ObjectExtensions.TryGetPropertyValue<object>((object)attribute, "Condition", (object)null);
if (obj == null || obj.ToString() == "Always")
flag = true;
}
jsonProperty.Ignored = (flag || EnumerableExtensions.FirstAssignableToTypeNameOrDefault<Attribute>(customAttributes, "System.Text.Json.Serialization.JsonExtensionDataAttribute", 1) != null);
if (_serializerOptions.PropertyNamingPolicy != null)
jsonProperty.PropertyName = (string)_serializerOptions.PropertyNamingPolicy.ConvertName(member.Name);
dynamic val = EnumerableExtensions.FirstAssignableToTypeNameOrDefault<Attribute>(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;
if (((IEnumerable)serializerOptions.Converters).OfType<object>().Any((object c) => TypeExtensions.IsAssignableToTypeName(c.GetType(), "System.Text.Json.Serialization.JsonStringEnumConverter", 1)))
jsonSerializerSettings2.Converters.Add(new StringEnumConverter());
return jsonSerializerSettings2;
}
}
}