使用JSON.NET问题反序列化JSON

时间:2014-05-09 11:08:02

标签: c# .net json json.net

我一直在尝试使用JSON.Net

在C#中反序列化JSON流

我有一个JObject'JO1',当我做一个JO1.ToString()时,字符串内容为:

{
  "Successful": true,
  "Value": [
    {
      "no": "1",
      "name": "Accounting"
    },
    {
      "no": "2",
      "name": "Marketing"
    },
    {
      "no": "3",
      "name": "Information Technology"
    }
  ]
}

我尝试过以下.NET代码无济于事。

public class main()
{
  public void main()
  {
   JObject jo = new JObject();
   jo = functionthatretrievestheJSONdata();

   List<departments> dt1 = JsonConvert.DeserializeObject<List<departments>>(jo.ToString());
  }
}

public class departments
{
    public int no { get; set; }
    public string name { get; set; }
}

有人可以给我指向正确的方向吗?

2 个答案:

答案 0 :(得分:5)

你需要一个类来包装List<departments>,如下所示:

public class DeserializedDepartments
{
    public bool Successful { get; set; }
    public List<departments> Value { get; set; }
}

所以你要像这样反序列化:

DeserializedDepartments dt1 =
    JsonConvert.DeserializeObject<DeserializedDepartments>(jo.ToString());

现在,您的List<departments>位于Value的{​​{1}};或dt1

答案 1 :(得分:2)

您没有考虑该列表是附加到另一个对象的数组。

你有一个名为Successful的布尔值的对象和一个名为Value的部门数组。

试试这个:

public class main()
{
    public void main()
    {
        JObject jo = new JObject();
        jo = functionthatretrievestheJSONdata();

        Results dt1 = JsonConvert.DeserializeObject<Results>(jo.ToString());
        var depts = dt1.Value;
    }
}

public class Results 
{
    public bool Successful {get;set;}
    public List<Department> Value {get;set;}
}

public class Department
{
    public int no { get; set; }
    public string name { get; set; }
}