C# 继承字典的Serialize类未序列化属性

C# 继承字典的Serialize类未序列化属性,c#,dictionary,serialization,C#,Dictionary,Serialization,我有一个从Dictionary继承的类,它有几个属性。当我序列化时,它只序列化字典而不是属性。如果我有一个包含属性的有效负载,它会反序列化这些属性。如何使其序列化对象(包括属性) public class Maintenance : Dictionary<string, dynamic> { public int PersonId { get; set; } } return JsonConvert.DeserializeObject<T>(jsonString

我有一个从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
公共类维护:字典
{
公共int PersonId{get;set;}
}
返回JsonConvert.DeserializeObject(jsonString)//填充PersonId,所有其他属性最终都会出现在字典中。
返回JsonConvert.SerializeObject(维护)//仅返回字典内容

对于如何使序列化使用与反序列化相同的行为,我非常感谢您的建议。

来自Json.Net文档: 请注意,序列化时,只有字典名称/值将写入JSON对象,反序列化时,JSON对象上的属性将添加到字典的名称/值。序列化期间,.NET字典上的其他成员将被忽略

摘自此链接:

假设您希望字典的键和值与json输出中的PersonId处于相同的层次结构级别,您可以使用具有组合而不是继承的
JsonExtensionData
属性,如下所示:

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

    [JsonExtensionData]
    public Dictionary<string, dynamic> ThisNameWillNotBeInTheJson { get; set; }
}
公共类维护
{
公共int PersonId{get;set;}
[JsonExtensionData]
公共字典thisname不会出现在jobson{get;set;}
}

再看看这个问题:

这可能不是最好的方法。我无法让intellisense看到类属性,尽管它们在那里。如果该类实现了一个字典作为属性(即作为集合类),那么它可以正常工作。intellisense对我来说可以正常工作,我不能将字典作为属性使用,因为我无法控制json负载的结构。