c# - 如何将两个 float 组的 JSON 解析为两个列表?

标签 c# json list parsing

我有一个 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>按描述列出待进一步处理的列表?

最佳答案

要将第一个 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();

演示 fiddle here .

关于c# - 如何将两个 float 组的 JSON 解析为两个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56103920/

相关文章:

c# - 多次单击按钮时如何防止应用程序挂起?

php - AJAX 不返回任何数据

python - 获取列表部分的相应总和

python - 缩短列表

c# - 搜索字符串数组中包含的字典键

c# - 禁用背景绘画

C# 链接操作

html - 有什么方法可以检查您安装的 gulp 版本吗?

python - 如何在不在 python 中加载完整的 json 的情况下更新 json 文件中键的值?

android - 如何将获取的数据转换为产品列表?