in rd-net/RdFramework.Reflection/ScalarSerializer.cs [45:94]
public SerializerPair CreateSerializer(Type type, ISerializersSource serializers)
{
if (type == typeof(IntPtr))
{
throw new ArgumentException($"Unable to serialize {type.ToString(true)}. Platform-specific types cannot be serialized.");
}
if (typeof(Delegate).IsAssignableFrom(type))
{
throw new ArgumentException($"Unable to serialize {type.ToString(true)}. Delegates cannot be serialized.");
}
if (myBlackListChecker(type))
{
Assertion.Fail($"Attempt to create serializer for black-listed type: {type.ToString(true)}");
}
var typeInfo = type.GetTypeInfo();
var builtIn = BuiltInSerializers.TryGet(typeInfo, t1 => serializers.GetOrRegisterSerializerPair(t1, true));
if (builtIn != null)
{
myTypesCatalog?.AddType(type);
return builtIn;
}
else if (type.IsEnum)
{
var serializer = ReflectionUtil.InvokeGenericThis(this, nameof(CreateEnumSerializer), type);
return (SerializerPair) serializer!;
}
else if (ReflectionSerializerVerifier.IsValueTuple(typeInfo))
{
return (SerializerPair) ReflectionUtil.InvokeGenericThis(this, nameof(CreateValueTupleSerializer), type, new object?[] { serializers })!;
}
else if (typeInfo.IsGenericType && typeInfo.GetGenericTypeDefinition() == typeof(Nullable<>))
{
var genericTypeArgument = typeInfo.GetGenericArguments()[0];
var nullableSerializer = (SerializerPair) ReflectionUtil.InvokeGenericThis(this, nameof(RegisterNullable), genericTypeArgument, new object?[] { serializers })!;
return nullableSerializer;
// return CreateGenericSerializer(member, typeInfo, implementingType, implementingTypeInfo);
}
else
{
myTypesCatalog?.AddType(type);
var serializer = ReflectionUtil.InvokeGenericThis(this, nameof(CreateCustomScalar), type, new object[] { serializers });
return (SerializerPair) serializer!;
}
}