Как разбить JSON из двух массивов с плавающей точкой в ​​два списка? - PullRequest
2 голосов
/ 13 мая 2019

У меня есть JSON, который я публикую в своем приложении WebAPI C #. Мне нужно дополнительно обработать этот JSON и сохранить данные из него в таблицу базы данных. JSON выглядит так и содержит широты и долготы:

{
  "lattitudes": [
    48.75608,
    48.75608,
    48.75608,
    48.75608,
    48.75608,
],
  "longitudes": [
    48.75608,
    2.302038,
    48.75608,
    48.75608,
    48.75608,
  ]
}

Обратите внимание, что JSON содержит два массива чисел вместо одного массива объектов, каждый из которых имеет 2 атрибута.

Что я хотел бы сделать, так это записать эти массивы "широты" и "долготы" в списки / массивы, а затем обработать их с помощью оператора SQL "INSERT" (я знаю - это довольно неприятный способ сделать это, но я не мог Ничего умнее не придумаешь).

Как я могу десериализовать этот JSON в два List<T> списка для дальнейшей обработки, как описано?

1 Ответ

2 голосов
/ 13 мая 2019

Чтобы десериализовать первый образец JSON в массив пар широта / долгота, вы можете:

  1. Используйте один из инструментов генерации кода, упомянутых в Как автоматически сгенерировать файл класса C # из строки объекта JSON , чтобы сгенерировать соответствующую модель данных. http://json2csharp.com/ является одним из вариантов.
  2. Используйте один из сериализаторов JSON, упомянутых в Как превратить объект C # в строку JSON в .NET? , чтобы десериализовать JSON для вашей модели данных. в настоящее время является самым популярным.
  3. Объедините массивы в пары, используя Enumerable.Zip.

Таким образом, если мы определим следующую модель данных:

public class RootObject
{
    public List<double> lattitudes { get; set; }
    public List<double> longitudes { get; set; }
}

public class LatLong
{
    public double Latitude { get; set; }
    public double Longitude { get; set; }
}

Мы можем десериализовать ваш JSON следующим образом:

var root = JsonConvert.DeserializeObject<RootObject>(jsonString);

var array = root.lattitudes
    .Zip(root.longitudes, (lat, @long) => new LatLong { Latitude = lat, Longitude = @long })
    .ToArray();

Демонстрационная скрипка здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...