Десериализировать ответ от сервера (json)
Не получается десериализировать json из API Imgbb
Делаю так:
public class Thumb
{
public string filename { get; set; }
public string name { get; set; }
public string mime { get; set; }
public string extension { get; set; }
public string url { get; set; }
}
using (WebClient client = new WebClient())
{
client.UploadValuesAsync(new Uri("https://api.imgbb.com/1/upload"), "POST", param);
client.UploadValuesCompleted += (s, e2) =>
{
string json = Encoding.UTF8.GetString(e2.Result);
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
List<Thumb> listThumb = (List<Thumb>)javaScriptSerializer.Deserialize(json, typeof(List<Thumb>));
foreach (Thumb item in listThumb)
{
MessageBox.Show(item.url + "___" + item.filename);
}
};
}
Ответ получаю такой:
{"data":{"id":"kQsvMWQ","title":"ca434bb705ee","url_viewer":"https:\/\/ibb.co\/kQsvMWQ","url":"https:\/\/i.ibb.co\/4Pn3J5P\/ca434bb705ee.png","display_url":"https:\/\/i.ibb.co\/4Pn3J5P\/ca434bb705ee.png","size":41470,"time":"1616506259","expiration":"0","image":{"filename":"ca434bb705ee.png","name":"ca434bb705ee","mime":"image\/png","extension":"png","url":"https:\/\/i.ibb.co\/4Pn3J5P\/ca434bb705ee.png"},"thumb":{"filename":"ca434bb705ee.png","name":"ca434bb705ee","mime":"image\/png","extension":"png","url":"https:\/\/i.ibb.co\/kQsvMWQ\/ca434bb705ee.png"},"delete_url":"https:\/\/ibb.co\/kQsvMWQ\/eae1df4e5c101656e8156876aef02795"},"success":true,"status":200}
Пример ответа с сайта:
{
"data": {
"id": "2ndCYJK",
"title": "c1f64245afb2",
"url_viewer": "https://ibb.co/2ndCYJK",
"url": "https://i.ibb.co/w04Prt6/c1f64245afb2.gif",
"display_url": "https://i.ibb.co/98W13PY/c1f64245afb2.gif",
"size": "42",
"time": "1552042565",
"expiration":"0",
"image": {
"filename": "c1f64245afb2.gif",
"name": "c1f64245afb2",
"mime": "image/gif",
"extension": "gif",
"url": "https://i.ibb.co/w04Prt6/c1f64245afb2.gif",
},
"thumb": {
"filename": "c1f64245afb2.gif",
"name": "c1f64245afb2",
"mime": "image/gif",
"extension": "gif",
"url": "https://i.ibb.co/2ndCYJK/c1f64245afb2.gif",
},
"medium": {
"filename": "c1f64245afb2.gif",
"name": "c1f64245afb2",
"mime": "image/gif",
"extension": "gif",
"url": "https://i.ibb.co/98W13PY/c1f64245afb2.gif",
},
"delete_url": "https://ibb.co/2ndCYJK/670a7e48ddcb85ac340c717a41047e5c"
},
"success": true,
"status": 200
}
MessageBox.Show(item.url + "___" + item.filename); показывает пустоту.
В чем именно может быть проблема? Пробовал убрать \ из ответа, но все так же.
Ответы (1 шт):
List<> - это список (коллекция, массив). В показанном json нет ни одной колллекции. Массивы в json заключаются в квадратные скобки. Соответственно, вы получаете пустой список с нулём элементов.
В фигурных скобках в json содержатся объекты.
В Visual Studio можно сгенерировать набор классов по json автоматически. Копируем json в буфер обмена, идём в меню Edit > Paste Special > Paste JSON As Classes.
Вот упрощённый набор классов, из которого я выкинул всё лишнее:
public class Root
{
public Data data { get; set; }
}
public class Data
{
public Thumb thumb { get; set; }
}
public class Thumb
{
public string filename { get; set; }
public string name { get; set; }
public string mime { get; set; }
public string extension { get; set; }
public string url { get; set; }
}
Получаем нужные данные:
var root = javaScriptSerializer.Deserialize<Root>(json);
var thumb = root.data.thumb;
Console.WriteLine(thumb.url + "___" + thumb.filename);