【问题标题】:Serialization of derived objects with json.net使用 json.net 对派生对象进行序列化
【发布时间】:2011-12-29 20:46:06
【问题描述】:

Dictionary<DateTime, double> 继承的对象的序列化不包括生成的 json 字符串中的字段和属性。

注意:这是一个简化的示例。是的,我知道不应该从 Dictionary 类型派生。

序列化该类型的对象:

public class Timeserie : Dictionary<DateTime, double>
{
    public string id;

    public Timeserie()
    {

    }

    public Timeserie(string id)
    {
        this.id = id;
    }
}

使用:

var json_settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };
var s = JsonConvert.SerializeObject(timeserie, Formatting.Indented, json_settings);

仅包括基类数据:

{
  "01/02/2009 00:00:00": 10.23,
  "01/05/2009 00:00:00": 11.33
}

不包括id 字段。

我需要如何使用 json.net 以便在派生类中声明的字段和属性包含在序列化中?

【问题讨论】:

    标签: serialization properties field json.net inherited


    【解决方案1】:

    看起来,通过 json.net 的代码,它有一个处理字典的特殊合同。

    所以要么制定新合同,要么封装字典(即,使字典成为你的类的属性)

    如果你创建了相互继承的普通类,这段代码将序列化派生类的所有属性

    【讨论】:

    • 在派生类中声明的公共字段和属性都被忽略。
    • 如果把字典的继承去掉,是不是序列化id?
    • 我基本上做你正在做的事情,它处理子类就好了
    • 然后它的行为应该如此。
    • 如果你创建了一个像 MyDictionary { public int fakeProperty { get; 这样的假基类放; } 并继承它,它仍然序列化 id 和 fakeproperty 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多