Я хочу преобразовать это возвращение JSON из php файла в С#. Но как новичок не знает, как, пожалуйста, помогите.
{"response": [
{"user_id":"26","crtloc_lat":"47.678238","crtloc_lng":"-122.131416"},
{"user_id":"27","crtloc_lat":"9.350192","crtloc_lng":"-95.391006"},
{"user_id":"28","crtloc_lat":"47.678238","crtloc_lng":"-122.131416"}
]}
Вышеупомянутый JSON возвращается из моего PHP файла.
WebRequest request = WebRequest.Create("http://localhost/abh/returntest.php");
WebResponse response = await request.GetResponseAsync();
List<Response> json ;
using (var stream = new StreamReader(response.GetResponseStream()))
{
json = JsonConvert.DeserializeObject<List<Response>>(stream.ReadToEnd());
}
foreach (var item in json)
{
Console.WriteLine("id={0},latitude={1},longitude={2}",item.user_id,item.crtloc_lat,item.crtloc_lng);
}
Занятия, которые я использую:
public class Response
{
public string user_id { get; set; }
public string crtloc_lat { get; set; }
public string crtloc_lng { get; set; }
}
public class RootObject
{
public List<Response> response { get; set; }
}
Я получаю эту ошибку:
Невозможно десериализовать текущий объект JSON (например, {"name": "value"}) в type 'System.Collections.Generic.List'1 [afterall.Response]', потому что для этого требуется массив JSON (например, [1,2, 3]) для десериализации.
Следующая строка неверна на основе вашего образца JSON.
json = JsonConvert.DeserializeObject<List<Response>>(stream.ReadToEnd());
Попробуйте изменить его на:
json = JsonConvert.DeserializeObject<RootObject>(stream.ReadToEnd());
Редактировать:
WebRequest request = WebRequest.Create("http://localhost/abh/returntest.php");
WebResponse response = await request.GetResponseAsync();
RootObject json;
using (var stream = new StreamReader(response.GetResponseStream()))
{
json = JsonConvert.DeserializeObject<RootObject>(stream.ReadToEnd());
}
foreach (var item in json)
{
Console.WriteLine("id={0},latitude={1},longitude={2}",item.user_id,item.crtloc_lat,item.crtloc_lng);
}
Из вашей тестовой ссылки в комментарии к сообщению. Ваш ответ не таков:
{"response": [
{"user_id":"26","crtloc_lat":"47.678238","crtloc_lng":"-122.131416"},
{"user_id":"27","crtloc_lat":"9.350192","crtloc_lng":"-95.391006"},
{"user_id":"28","crtloc_lat":"47.678238","crtloc_lng":"-122.131416"}
]}
как вы публикуете, а скорее:
connected{"response": [
{"user_id":"26","crtloc_lat":"47.678238","crtloc_lng":"-122.131416"},
{"user_id":"27","crtloc_lat":"9.350192","crtloc_lng":"-95.391006"},
{"user_id":"28","crtloc_lat":"47.678238","crtloc_lng":"-122.131416"
}]
}
Это не соответствует вашему образцу кода. Удалить
связанный{ }
завершение или возврат правильного json для подключенного объекта (независимо от подключения). Если вы удалите упаковку, она должна работать как отправленный @Dietz.
перепишите следующую строку:
json = JsonConvert.DeserializeObject<List<Response>>(stream.ReadToEnd());
в виде
json = JsonConvert.DeserializeObject<Response>(stream.ReadToEnd());