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

How to Deserialize JSON(multi level) in C#

我的网站 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);

但它抛出异常。

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[EzyCity.AllCategories]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.

所有类别class

 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?

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

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

因此您必须将 Json 反序列化为对象:

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

你需要这样的东西

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);

反序列化