Json使用Newtosoft Json反序列化为null

时间:2017-01-03 20:11:49

标签: c# json.net restsharp

我有以下json:

{
  "cuisines": [
    {
      "cuisine": {
        "cuisine_id": 152,
        "cuisine_name": "African"
      }
    },
    {
      "cuisine": {
        "cuisine_id": 1,
        "cuisine_name": "American"
      }
    },
    {
      "cuisine": {
        "cuisine_id": 4,
        "cuisine_name": "Arabian"
      }
    },
    {
      "cuisine": {
        "cuisine_id": 151,
        "cuisine_name": "Argentine"
      }
    }
    ]
}

我使用RestSharp获取数据并将其发送到JSON.Net:

JsonConvert.DeserializeObject<Cuisines>(content)

我正在使用以下课程:

public class Cuisine
    {
        [JsonProperty("cuisine_id")]
        public string cuisine_id { get; set; }
        [JsonProperty("cuisine_name")]
        public string cuisine_name { get; set; }
    }

    public class Cuisines
    {
        [JsonProperty("cuisines")]
        public List<Cuisine> AllCuisines { get; set; } 
    }

奇怪的是,返回数据是根据我的要求找到81个美食对象,但所有美食信息都是空的。

4 个答案:

答案 0 :(得分:3)

你的模特还需要一个班级。所以它应该是

public class Cuisine
{
    [JsonProperty("cuisine_id")]
    public string cuisine_id { get; set; }
    [JsonProperty("cuisine_name")]
    public string cuisine_name { get; set; }
}

public class CuisineWrapper
{
    public Cuisine cuisine { get; set; }
}

public class Cuisines
{
    [JsonProperty("cuisines")]
    public List<CuisineWrapper> AllCuisines { get; set; }
}

答案 1 :(得分:1)

您的类定义与提供的JSON不匹配。顶级数组包含具有单个属性(对象)cuisine的对象,如下所示:

"cuisine": {
    "cuisine_id": 152,
    "cuisine_name": "African"
}

您的C#List<Cuisine>包含直接展示cuisine_idcuisine_name的对象。如果您无法更改JSON,请使用JsonObjectAttribute

修饰class Cuisine

答案 2 :(得分:0)

实际上你有3个对象 - 一个根对象,它包含一个名为cuisines的属性,它是Cuisine的集合。 当您在视觉工作室中将JSON粘贴为类时,您将获得以下结构(您可能希望重命名某些内容并列出 - 如果是数组)

public class Rootobject
{
    public Cuisine[] cuisines { get; set; }
}

public class Cuisine
{
    public Cuisine1 cuisine { get; set; }
}

public class Cuisine1
{
    public int cuisine_id { get; set; }
    public string cuisine_name { get; set; }
}

答案 3 :(得分:-1)

您的JSON嵌套比您的类结构更多。如果您可以将JSON更改为以下格式:

"cuisines": [
    {
        "cuisine_id": 152,
        "cuisine_name": "African"
    },
    {
        "cuisine_id": 1,
        "cuisine_name": "American"
    },
    .. etc

然后它将与您的班级结构相匹配。

或者,更改您的类结构以匹配JSON:

public class Cuisine
{
    [JsonProperty("cuisine")]
    public CuisineData data { get; set; }
}

public class CuisineData
{
    [JsonProperty("cuisine_id")]
    public string cuisine_id { get; set; }
    [JsonProperty("cuisine_name")]
    public string cuisine_name { get; set; }
}

public class Cuisines
{
    [JsonProperty("cuisines")]
    public List<Cuisine> AllCuisines { get; set; } 
}