0

Использую библиотеку NewTownSoft. Столкнулся с проблемой парсинга простой JSON структуры:

[  
   {  
      "latitude":"1",
      "longitude":"2"
   },
   {  
      "latitude":"-3",
      "longitude":"5"
   }
]

Десериализуя через JsonConvert.DeserializeObject<>(); Необходимо указать класс в котором нужно описать структуру JSON. Как составить класс для вышеуказанного JSON? Можно ли вообще это сделать не используя dynamic и т.п костылей? просто дефолтно.

icedev
  • 430
  • 1
    В данном случае все элементарно. Создайте класс с двумя свойствами: latitude и longitude и тогда DeserializeObject<List<MyClass>>(); – Bulson Jun 01 '18 at 08:25
  • А в чем проблема? Это обычный массив же. Воспользуйтесь инструментом: https://app.quicktype.io/#r=json2csharp – Андрей NOP Jun 01 '18 at 08:25
  • @АндрейNOP Я использую библиотеку Newtownsoft привык к ней. – icedev Jun 01 '18 at 08:32
  • @Bulson Может я что то неверно делаю. Я понял так: создаю класс class sat{ public string latitude{get;set;} public string longitude{get;set;}} Потом LIst data = JsonConvert.DeserializeObject<List>(json_text) , верно? – icedev Jun 01 '18 at 08:33
  • 1
    @icedev, этот инструмент как раз создает всю необходимую структуру классов для JSON.NET по вашему json: https://i.stack.imgur.com/XE9h7.png – Андрей NOP Jun 01 '18 at 08:35
  • Да. Вроде верно, а что не работает? – Bulson Jun 01 '18 at 08:37
  • @АндрейNOP спасибо, отличный инструмент. Класс составил верно, но вот парсит(в коде) он его почему то очень геморно, 3 "лишних" функции создал. – icedev Jun 01 '18 at 08:37
  • @Bulson улетает в Exception {"Unexpected character encountered while parsing value: h. Path '', line 0, position 0."} – icedev Jun 01 '18 at 08:38
  • У вас похоже в json_text что-то лишнее попало – Андрей NOP Jun 01 '18 at 08:40
  • @АндрейNOP вроде все нормально,чекнул на валидность JSON – icedev Jun 01 '18 at 08:50
  • Нашел проблему,сам невнимательный, ох уж эти переменные с похожими названиями) json_text и json_test )) Всем большое спасибо! – icedev Jun 01 '18 at 08:56

1 Answers1

1

В Visual Studio есть такой инструмент - Paste Special (Edit -> Paste Special), с помощю которого можно сгенерировать необходимые классы для парсинга JSON строки (Edit -> Paste Special -> Past JSON As Classes)։

public class Coordinate
{
    [JsonProperty("latitude")]
    public string Latitude { get; set; }

    [JsonProperty("longitude")]
    public string Longitude { get; set; }
}

и использовать:

var result = JsonConvert.DeserializeObject<Coordinate[]>(json_string);

Пример с DotNetFiddle

SᴇM
  • 871
  • 1
  • 5
  • 19