继承字典的Serialize类不是序列化属性

时间:2015-06-28 11:45:07

标签: c# dictionary serialization

我有一个继承自Dictionary的类,并且有一些属性。当我序列化它时,只序列化字典而不是属性。如果我有一个包含属性的有效负载,它会对它们进行反序列化。如何使其序列化我的对象,包括属性?

public class Maintenance : Dictionary<string, dynamic>
{
    public int PersonId { get; set; }
}

return JsonConvert.DeserializeObject<T>(jsonString); //Populates PersonId and all other properties end up in the dictionary.
return JsonConvert.SerializeObject(maintenance); //Only returns dictionary contents

我很欣赏有关如何使序列化使用与反序列化相同的行为的建议。

1 个答案:

答案 0 :(得分:3)

来自Json.Net文档: “请注意,序列化时只会将字典名称/值写入JSON对象,并且在反序列化时,JSON对象的属性将添加到字典的名称/值中。在序列化过程中,将忽略.NET字典上的其他成员。”

取自此链接:http://www.newtonsoft.com/json/help/html/SerializationGuide.htm

假设你想要钥匙和钥匙与json输出中的PersonId在同一层次结构级别上的字典值,您可以使用带有组合的JsonExtensionData属性而不是继承,如下所示:

public class Maintenance
{
    public int PersonId { get; set; }

    [JsonExtensionData]
    public Dictionary<string, dynamic> ThisNameWillNotBeInTheJson { get; set; }
}

另请看这个问题:How to serialize a Dictionary as part of its parent object using Json.Net