NullableConverterFactory
using System.Reflection;
namespace System.Text.Json.Serialization.Converters
{
internal class NullableConverterFactory : JsonConverterFactory
{
public override bool CanConvert(Type typeToConvert)
{
return Nullable.GetUnderlyingType(typeToConvert) != (Type)null;
}
public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options)
{
Type type = typeToConvert.GetGenericArguments()[0];
JsonConverter converter = options.GetConverter(type);
if (!converter.TypeToConvert.IsValueType && type.IsValueType)
return converter;
return CreateValueConverter(type, converter);
}
public static JsonConverter CreateValueConverter(Type valueTypeToConvert, JsonConverter valueConverter)
{
return (JsonConverter)Activator.CreateInstance(typeof(NullableConverter<>).MakeGenericType(valueTypeToConvert), BindingFlags.Instance | BindingFlags.Public, null, new object[1] {
valueConverter
}, null);
}
}
}