使用Newtonsoft的反序列化器反序列化对象数组

时间:2016-08-28 11:49:19

标签: c# json visual-studio-2015 json.net deserialization

我正在努力反序列化JSON数据,这些数据由一组内部具有相同结构的类似对象组成,但每个对象具有我无法预测的不同名称。

JSON的整体结构如下(source here):

enter image description here

名为1be2f7和193ff5的对象具有相同的结构。

如果我对这两个对象的名称进行硬编码,反序列化没有问题,但是如何在没有硬编码的情况下这样做?

以下是我尝试的内容:

    public List<Rig> rigs { get; set; }

但是这给出了这个错误:

  

无法反序列化当前的JSON对象(例如{&#34; name&#34;:&#34; value&#34;})   进入类型&#39; System.Collections.Generic.List`1 [Eth.Rig]&#39;因为   type需要一个JSON数组(例如[1,2,3])才能正确反序列化。至   修复此错误要么将JSON更改为JSON数组(例如[1,2,3])   或更改反序列化类型,使其成为正常的.NET类型(例如   不是像整数这样的原始类型,不是像数组那样的集合类型   或者List)可以从JSON对象反序列化。   JsonObjectAttribute也可以添加到类型中以强制它   从JSON对象反序列化。路径&#39; rigs.1be2f7&#39;,第1行,位置   18。

similar question here但其接受的答案对我不起作用,因为Visual Studio也只是硬编码对象的名称。

1 个答案:

答案 0 :(得分:0)

发现它 - 结果非常简单。

改变这个:

public List<Rig> rigs { get; set; }

对此:

public Dictionary<Rig> rigs { get; set; }

然后使用它循环:

foreach(KeyValuePair<string, Rig> entry in rigs)
{
    // do something with entry.Value or entry.Key
}