我有一个继承自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
我很欣赏有关如何使序列化使用与反序列化相同的行为的建议。
答案 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