c# - 继承字典的序列化类不是序列化属性

标签 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

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

最佳答案

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

关于c# - 继承字典的序列化类不是序列化属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31099396/

相关文章:

c# - XAML 绑定(bind)问题 Windows Phone 中的 ImageSource

c# - 除了 System.Type 之外没有任何更多信息的 Cast 对象

c++ - 如何将<map>存储在<vector>中?

java - 为其他对象实现等价于 String.intern()

javascript - JSON.parse 字符串无效字符问题

c# - 是否有必要在连续的文件操作之间产生?

java - 如何将 .dic 和 .aff 文件添加到 java jar 中?

java - "Set<String> ss1 = new HashSet<>(m1.keySet());"和 "Set<String> ss2 = m1.keySet();"之间有什么区别吗

C# xml 序列化程序 - 无法生成临时类

memory-management - Zend_Cache 反序列化 - 内存占用?