Json 使用 Newtosoft 反序列化为 null Json

Json Deserializing to null using Newtosoft Json

我有以下 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; } 
    }

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

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

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

然后它将匹配您的 class 结构。

或者,更改您的 class 结构以匹配 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; } 
}

您的模型还需要一个 class。所以应该是

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

您实际上有 3 个对象 - 一个包含名为 cuisines 的 属性 的根对象,它是 Cuisine 的集合。 当您在 visual studio 中将 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; }
}

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

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

因为您的 C# List<Cuisine> 包含直接公开 cuisine_idcuisine_name 的对象。如果不能改JSON,就用JsonObjectAttribute

修饰class Cuisine