继承字典的序列化类没有序列化属性

本文关键字:序列化 属性 继承 字典 | 更新日期: 2023-09-27 18:00:04

我有一个从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

关于如何使序列化使用与反序列化似乎使用的行为相同的行为,我将不胜感激。

继承字典的序列化类没有序列化属性

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

另请看这个问题:如何使用Json.Net 将Dictionary序列化为其父对象的一部分