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_id
和 cuisine_name
的对象。如果不能改JSON,就用JsonObjectAttribute
修饰class Cuisine
我有以下 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_id
和 cuisine_name
的对象。如果不能改JSON,就用JsonObjectAttribute
class Cuisine