<PackageReference Include="System.Text.Json" Version="6.0.0-preview.2.21154.6" />
NullableConverterFactory
using System.
Reflection;
namespace System.
Text.
Json.
Serialization.
Converters
{
internal class NullableConverterFactory :
JsonConverterFactory
{
public override bool CanConvert(
Type typeToConvert)
{
return typeToConvert.
IsNullableOfT();
}
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);
}
}
}