【问题标题】:json.net deserializing - how to specify converters for child objects in the graph?json.net 反序列化 - 如何为图中的子对象指定转换器?
【发布时间】:2011-02-21 20:42:25
【问题描述】:

我正在尝试使用 json.net 反序列化一个有几个孩子的对象。

我有一个自定义转换器来转换从 BaseDuty 类继承的任务及其任务,使用它调用时工作正常

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

谢谢

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    JsonConverterAttribute来标注Duty类怎么样——比如,

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

    【讨论】:

    • 我试了一下,虽然效果不太好。感谢您尝试一些东西。最终为图中的每个编写自定义 json 转换器,基本上都是我自己反序列化它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 2016-05-17
    相关资源
    最近更新 更多