【发布时间】:2018-01-16 16:12:04
【问题描述】:
我正在使用 Zomato API,我收到以下 JSON 响应:
{
"categories": [
{
"categories": {
"id": 1,
"name": "Delivery"
}
},
{
"categories": {
"id": 2,
"name": "Dine-out"
}
},
{
"categories": {
"id": 3,
"name": "Nightlife"
}
},
{
"categories": {
"id": 4,
"name": "Catching-up"
}
},
{
"categories": {
"id": 5,
"name": "Takeaway"
}
},
{
"categories": {
"id": 6,
"name": "Cafes"
}
},
{
"categories": {
"id": 7,
"name": "Daily Menus"
}
},
{
"categories": {
"id": 8,
"name": "Breakfast"
}
},
{
"categories": {
"id": 9,
"name": "Lunch"
}
},
{
"categories": {
"id": 10,
"name": "Dinner"
}
},
{
"categories": {
"id": 11,
"name": "Pubs & Bars"
}
},
{
"categories": {
"id": 13,
"name": "Pocket Friendly Delivery"
}
},
{
"categories": {
"id": 14,
"name": "Clubs & Lounges"
}
}
]
}
我想反序列化这个响应并创建了以下类:
public class CategoriesTop
{
public List<CategoriesBottom> categories { get; set; }
}
public class CategoriesBottom
{
public Categorie categorie { get; set; }
}
public class Categorie
{
public int id { get; set; }
public string name { get; set; }
}
我正在使用此代码来获取响应:
public Form1()
{
InitializeComponent();
HttpWebRequest webRequest =
WebRequest.Create("https://developers.zomato.com/api/v2.1/categories")
as HttpWebRequest;
HttpWebResponse webResponse = null;
webRequest.Headers.Add("X-Zomato-API-Key", "509ce9e4863960cdc076fb3817cc238e");
//you can get KeyValue by registering with Zomato.
webRequest.Method = "GET";
webResponse = (HttpWebResponse)webRequest.GetResponse();
if (webResponse.StatusCode == HttpStatusCode.OK)
{
StreamReader responseReader = new
StreamReader(webResponse.GetResponseStream());
string responseData = responseReader.ReadToEnd();
//XmlDocument doc = new XmlDocument();
//doc.LoadXml(responseData);
//XmlNodeReader xmlReader = new XmlNodeReader(doc);
//DataSet ds = new DataSet();
//ds.ReadXml(xmlReader);
List<CategoriesBottom> l = JsonConvert.DeserializeObject<List<CategoriesBottom>>(responseData);
foreach(CategoriesBottom c in l)
{
cmbCatName.Items.Add(c.categorie.name);
}
}
}
当我运行程序时,我在 JSON.Convert 行收到错误:
Newtonsoft.Json.JsonSerializationException: '无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[WindowsFormsApp1.CategoriesBottom]' 因为该类型需要正确反序列化的 JSON 数组(例如 [1,2,3])。
所以我认为我的反序列化代码有问题,或者类定义不正确。任何帮助将不胜感激。
【问题讨论】:
-
您好,错误表明您的 JSON 结构与您将数据反序列化到的类型不匹配。在这种情况下,您的类与 JSON 代码不匹配。尝试将数据反序列化为类别 []
-
@SpookKruger 你能告诉我怎么做吗?
标签: c# json serialization