Json.net反序列化 - 如何为图形中的子对象指定转换器?

3
我将尝试使用json.net对一个具有几个子元素的对象进行反序列化。
我有一个自定义转换器,可以将从BaseDuty类继承而来的Duty和它的Tasks进行转换。当使用以下命令时,该转换器正常工作:
JsonConvert.Deserialize<Duty>(json, new CustomJsonConverter());

然而,在调用时
JsonConvert.Deserialize<Person>(json,new CustomJsonConverter());

自定义的JSON转换器的CanConvert确实会触发,但它不像针对编写该转换器的类进行调用时那样进行验证。结果就是它会不断转换为基类,这不是我想要的,因为转换器正确地进行了转换。
所以,我的问题是如何最好地指定图形中子对象的转换器?
以下是一个示例:
    public class Person
    {
        public virtual string Name { get; set; }

        public virtual IList<Occupation> Occupations { get;set;}

        public virtual IList<RandomProperty> RandomProperties {get;set;}
    }

    public class Occupation
    {
        public IList<Duty> Duties {get;set;}
    }

public class Duty : BaseDuty
{
   public IList<Task> Tasks {get;set;}
}

public class BaseDuty
{
   public string Name {get;set;}
}

谢谢

1个回答

2

使用JsonConverterAttribute注释Duty类如何?例如:

[JsonConverterAttribute(typeof(CustomJsonConverter))]
public class Duty : BaseDuty
{
   ...
}

我尝试了一下,但是并没有完全成功。不过还是谢谢你提供的建议。最终我为图中的每个对象编写了自定义的JSON转换器,基本上是自己进行反序列化。 - andryuha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接