Skip to content

How to use ResolveSerializer with SerializerGenerator.GenerateCode(IsRecursive = true) ? #107

@neuecc

Description

@neuecc

SerializerGenerator.GenerateCode returns multiple paths with SerializerCodeGenerationConfiguration.IsRecursive = true.
I try to generated serializer set to SerializationContext.ResolveSerializer but ResolveSerializer needs type,
I've retrieved type from path by Regex.Replace(Path.GetFileNameWithoutExtension(path), "Serializer$", "").Replace("_", ".").
But it replace all _ to . so if class name contains _ then can't retrieve correctly.

// My T4 Sample
        static void SerializationContext_ResolveSerializer(object sender, ResolveSerializerEventArgs e)
        {
<# foreach(var path in generatedSerializerPaths) {  */ #>
            if (e.TargetType == typeof(<#= Regex.Replace(Path.GetFileNameWithoutExtension(path), "Serializer$", "").Replace("_", ".") #>)) e.SetSerializer(new <#= Path.GetFileNameWithoutExtension(path) #>(e.Context));
<# } #>
        }
// generated code
public static class Serializer
{
    static readonly SerializationContext serializationContext = new SerializationContext
    {
        EnumSerializationMethod = EnumSerializationMethod.ByUnderlyingValue,
        SerializationMethod = SerializationMethod.Array
    };

    static Serializer()
    {
        serializationContext.ResolveSerializer += SerializationContext_ResolveSerializer;
    }

    static void SerializationContext_ResolveSerializer(object sender, ResolveSerializerEventArgs e)
    {
        if (e.TargetType == typeof(Namespace.MyClass)) e.SetSerializer(new Namespace_MyClassSerializer(e.Context));
        if (e.TargetType == typeof(Namespace.MyClass2)) e.SetSerializer(new Namespace_MyClass2Serializer(e.Context));
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementRequires or request to feature enhancement

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions