c# - 反序列化包含动态属性 JSON.NET 的对象
问题描述
如何反序列化这个?PS:dynamic1,dynamic2等。每个都有完全不同的名称
JSON:
"bob": {
"dynamic1": 1,
"dynamic2": 5,
"dynamic3": 9,
},
public class Bob
{
[JsonProperty("bob")]
public string Name{ get; set; }
}
public class Root
{
[JsonProperty(PropertyName = "data")]
public Dictionary<Bob, int> DataItems { get; set; }
}
var resultJSON = JsonConvert.DeserializeObject<Root>(json);
解决方案
您的类Bob
没有正确表示您在 JSON 中拥有的数据。您的 json 显示Bob
为您的类中的一个对象,您的Jsonproperty
定义bob
为一个字符串。
对于您的 JSON:
{
"bob": {
"dynamic1": 1,
"dynamic2": 5,
"dynamic3": 9,
}
}
您应该使用RootObject
以下方式正确反序列化您的 JSON,
public class RootObject {
[JsonProperty("bob")]
public Dictionary<string, int> Bob { get; set; }
}
// and in your main, use the following to deserialize
RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);
在上面的示例中,obj 有一个 Dictionary,其中包含dynamic1
,dynamic2
和dynamic3
作为键,1、5 和 9 作为各自的值。
PS:当您将 json 反序列化到您的类中时,JsonProperty
必须与 JSON 本身中的属性完全匹配。如果您使用[JsonProperty("Bob")]
大写字母 B 并且 json 中有小写字母,则它将不起作用。JSON 也是区分大小写的。