反序列化基类对象的集合不会调用继承的Converters

问题描述

我的课程比这还要复杂,但这是技巧:

public class BaseClass {}

[JsonConverter(typeof(DerivedClassjsonConverter)]
public class DerivedClass: BaseClass {}

public class DerivedClassjsonConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(DerivedClass) || objectType.IsSubclassOf(typeof(DerivedClass));
    }
    
    // implementations both ReadJson() and WriteJson()
}

[JsonConverter(typeof(BaseClassListJsonConverter)]
public class BaseClassList
{
    private List<BaseClass> list;
}

如果我像这样序列化BaseClass的集合,则会调用DerivedClassjsonConverter的WriteJson():

// this is a snippet from BaseClassListJsonConverter.WriteJson() override
writer.WritePropertyName("list");
writer.WriteStartArray();
for (int i = 0; i < SOME_COUNT; i++)
{
    BaseClass bc = new DerivedClass();
    serializer.TypeNameHandling = TypeNameHandling.Auto;
    serializer.Serialize(writer,bc,typeof(BaseClass));
}
writer.WriteEndarray();

但是,如果我这样反序列化,则不会调用DerivedClassjsonConverter的ReadJson():

// this is a snippet from BaseClassListJsonConverter.ReadJson() override (assume reader is at the correct Token
serializer.TypeNameHandling = TypeNameHandling.All;
List<BaseClass> baseClassList = (List<BaseClass>)serializer.Deserialize(reader,typeof(List<BaseClass>));

这是不受支持的还是我做错了什么?

感谢您的时间和帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)