如何在C#中反序列化JSON(多级)

时间:2015-07-28 07:31:20

标签: c# json deserialization

我的网址API正在发送此JSON。

{   "data":[  
  {  
     "cat_id":"1",
     "category":"Clothing",
     "img_url":"sampleUrl.com"
  },
  {  
     "cat_id":"2",
     "category":"Electronic Shop",
     "img_url":"sampleUrl.com"
  },
  {  
     "cat_id":"3",
     "category":"Grocery",
     "img_url":"sampleUrl.com"
  },
  {  
     "cat_id":"4",
     "category":"Hardware",
     "img_url":"sampleUrl.com"
  }

  ]}

我尝试使用下面的c#代码

反序列化此JSON
var result = JsonConvert.DeserializeObject<List<AllCategories>>(content);

但它会引发异常。

  

无法将当前JSON对象(例如{“name”:“value”})反序列化为类型'System.Collections.Generic.List`1 [EzyCity.AllCategories]',因为该类型需要JSON数组(例如[1] ,2,3]正确地反序列化。

AllCategories类

 public class AllCategories
{
    private string cat_id;
    private string category;
    private string img_url;

    public string Cat_Id
    {
        get { return cat_id; }
        set { cat_id = value; }
    }

    public string Category
    {
        get { return category; }
        set { category = value; }
    }

    public string Image_Url
    {
        get { return img_url; }
        set { img_url = value; }
    }
}

要对这种类型的JSON进行反序列化应该怎么做?

2 个答案:

答案 0 :(得分:6)

您的json是一个带有数组的对象,如下所示:

public class ObjectData
{
   public List<AllCategories> data{get;set;}
}

因此,您必须将Json转换为对象:

var result = JsonConvert.DeserializeObject<ObjectData>(content);

答案 1 :(得分:5)

你需要这样的东西

public class Datum
{
    public string cat_id { get; set; }
    public string category { get; set; }
    public string img_url { get; set; }
}

public class RootObject
{
    public List<Datum> data { get; set; }
}

然后使用

var result = JsonConvert.DeserializeObject<RootObject>(content);

反序列化