public SerializerPair CreateSerializer()

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!;
      }
    }