在C#中反序列化复杂的JSON数据

时间:2016-02-08 06:45:56

标签: c# json dictionary

我只是C#编程的业余爱好者。现在我有一个类似于

的JSON数据
{
  type: "xxx",
  width: "xxx",
  dataSource: {
      "chart": {
          "caption": "xxx"
       },
      "data": [
       {},
       {} 
      ]
  } 
}

我将整个数据作为转义字符串。现在在Unescape之后我使用JavaScriptSerializer如下

var data = ser.Deserialize<Dictionary<String, Object>>(chartData);

我能够获得&#34;类型&#34;,&#34;宽度&#34;如

data["width"]
data["type"]

现在我必须得到&#34;标题&#34;的价值。任何建议如何实现,我相信字典结构需要改变,但我因为我在C#中缺乏知识而堆积

1 个答案:

答案 0 :(得分:2)

如果您知道对象的方案,那么您需要创建一个代表in的类,然后将json反序列化为它:

YourKnownClass obj = JsonConvert.DeserializeObject<YourKnownClass>(json);
Console.WriteLine(obj.dataSource.chart.caption.Value);

另一种选择是使用动态类型(如果您知道模式并且可以创建匹配的C#类,则没有充分理由使用动态对象。这也会对性能产生影响):

dynamic obj = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(obj.dataSource.chart.caption.Value);

顺便说一句,在这个例子中,我使用的是一个流行的图书馆json.net。