JSON для C # опустынивания

1

Я хочу преобразовать это возвращение 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]) для десериализации.

Теги:

3 ответа

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);
}   
  • 0
    @WaqasKanju: Дитц прав. Это исправит вашу проблему. Протестировал с вашим кодом и дал в строке вы разместили.
  • 0
    @WaqasKanju Вы должны также изменить объявление переменной json.
Показать ещё 2 комментария
0

Из вашей тестовой ссылки в комментарии к сообщению. Ваш ответ не таков:

{"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.

  • 0
    @ Я исправил это, но все еще не работал.
0

перепишите следующую строку:

json = JsonConvert.DeserializeObject<List<Response>>(stream.ReadToEnd());

в виде

json = JsonConvert.DeserializeObject<Response>(stream.ReadToEnd());
  • 0
    После изменения этой строки: она показывает эту ошибку, не может неявно преобразовать тип RootObject в System.Collection.Generics.List

Ещё вопросы

Сообщество Overcoder
Наверх
Меню