首页 > 解决方案 > 反序列化包含动态属性 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);

标签: c#json.net

解决方案


您的类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,dynamic2dynamic3作为键,1、5 和 9 作为各自的值。

PS:当您将 json 反序列化到您的类中时,JsonProperty 必须与 JSON 本身中的属性完全匹配。如果您使用[JsonProperty("Bob")]大写字母 B 并且 json 中有小写字母,则它将不起作用。JSON 也是区分大小写的。


推荐阅读