如何将两个float数组的JSON解析为两个列表?

时间:2019-05-12 22:19:25

标签: c# json list parsing

我有一个发布到我的WebAPI C#应用程序中的JSON。 我需要进一步处理此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 个答案:

答案 0 :(得分:2)

要将第一个JSON示例反序列化为纬度/经度对数组,您可以:

  1. 使用 How to auto-generate a C# class file from a JSON object string 中提到的一种代码生成工具来生成相应的数据模型。 http://json2csharp.com/是一种选择。
  2. 使用 How do I turn a C# object into a JSON string in .NET? 中提到的JSON序列化程序之一将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();

演示小提琴here