将JSON反序列化为列表

时间:2014-03-13 19:01:51

标签: c# json deserialization

我有一些JSON:

{
  "data": {
    "1001": {
      "name": "Test name 1"
    },
    "1004": {
      "name": "Test name 2"
    },
    "1005": {
      "name": "Test name 3"
    }
  }
}

如何将其反序列化为一个列表,一旦反序列化,将包含100110041005

到目前为止我的代码:

public class Data
{
    public string name { get; set; }
}
public class Object
{
    public Data data { get; set; }
}

...

List<string> list = new List<string>();
var data = JsonConvert.DeserializeObject<Object>(json);

foreach (var s in data)
    list.Add(s);

然而,这并不起作用。

3 个答案:

答案 0 :(得分:2)

尝试根据JSON结构对类进行建模:

public class Data
{
    public Dictionary<string, Node> data { get; set; }
}

public class Node
{
    public string name { get; set; }
}

var result = JsonConvert.DeserializeObject<Data>(json);

然后你可以迭代这些项目:

foreach(var item in result.data)
{
    //do stuff
}

答案 1 :(得分:1)

您无法将其直接转换为列表。问题是1001,1004和1005是对象的键。列表不包含数字,但包含其中的名称。这意味着您将丢失一些数据。

你可以做的是使用字典,然后迭代这些字典。

类数据应包含另一种类型的字典,我们称之为Name(so)。名称将有一个成员,字符串名称。

答案 2 :(得分:0)

您的模型与您的JSON不符。你的JSON说有一个名为'data'的对象有三个名为'1001','1004'和'1005'的属性,每个属性都有一个名为'name'的属性。你的c#模型应该是这样的:

public class Data
{
    public Child 1001 { get; set; }
    public Child 1004 { get; set; }
    public Child 1005 { get; set; }
}
public class Child
{
    public string name{ get; set; }
}

您可能需要考虑使用动态对象。