使用 Newtonsoft Json.NET 解析多维 JSON 数组

2023-12-25

我的 Json 返回如下:

[{"CreatedBy":"GIS_DB","CreatedDate":"3/8/2012 10:44:00 AM","Id":39,"修改者":"","修改日期":"","名称":"CF-39","StatusId":1,"TrailCoordinates":[{"CreatedBy":" GIS_DB","创建日期":"2012 年 3 月 8 日 10:44:00 AM","Id":1637,"纬度":32.76004207,"经度":-97.34006853,"修改者":"","修改日期":"","SortOrder":1,"TrailId":39},{ “创建者”:“GIS_DB”,“创建日期”:“2012 年 3 月 8 日 10:44:00 AM”,“Id”:1638,“纬度”:32.76004333,“经度”:-97.34012121,“修改者”:“”,“修改日期”:“”,“排序顺序”:2,“TrailId”:39}]} ,{"创建者":"GIS_DB","创建日期":"2012 年 3 月 8 日 10:44:00 AM","Id":40,"修改者":"","修改日期":"","名称":"CF-40","StatusId":1,"TrailCoordinates":[{"CreatedBy":" GIS_DB","创建日期":"2012 年 3 月 8 日 10:44:00 AM","Id":3755,"纬度":32.76034332,"经度":-97.3402069,"修改者":"","修改日期":"","SortOrder":1,"TrailId":40},{ “创建者”:“GIS_DB”,“创建日期”:“2012 年 3 月 8 日 10:44:00 AM”,“Id”:3756,“纬度”:32.76019181,“经度”:-97.3402448,“修改者”:“”,“修改日期”:“”,“排序顺序”:2,“TrailId”:40}]} ]

这些是我的课...

public class Trails
{
    [MonoTouch.Foundation.Preserve]
    public Trails(){ TrailCoord = new List<trailcoords>();}

    [MonoTouch.Foundation.Preserve, JsonProperty("Name")]
    public string TrailName { get; set; }

    [MonoTouch.Foundation.Preserve, JsonProperty("StatusId")]
    public int StatusId { get; set; }

    [MonoTouch.Foundation.Preserve, JsonProperty("TrailCoordinates")]
    public List<trailcoords> TrailCoord { get; set; }
//  public trailcoords 

public Trails (string trailname, int statusid, List<trailcoords> trailcoord)
{
    TrailName = trailname;
        StatusId = statusid;
        TrailCoord = trailcoord;
    }       
}

public class trailcoords
{       
        [MonoTouch.Foundation.Preserve]
    public trailcoords(){}  
[MonoTouch.Foundation.Preserve, JsonProperty("TrailId")]
    public string TrailId { get; set; }     

    [MonoTouch.Foundation.Preserve, JsonProperty("Latitude")]
    public double Latitude { get; set; }    
[MonoTouch.Foundation.Preserve, JsonProperty("Longitude")]
    public double Longitude { get; set; }   

public trailcoords (string trailid, double latitude, double longitude)
{
    TrailId = trailid;
        Latitude = latitude;
        Longitude = longitude;
    }
}

List<Trails> Posts = JsonConvert.DeserializeObject<List<Trails>> ( json );

因此,从这里我不确定如何访问列表中的纬度和经度项目。我可以毫无问题地访问 TrailName 等内容,但不确定我对数组中的数组中的项目做错了什么。我想添加它们,以便我可以将它们绘制为类似于我制作的结构中的线(硬编码值):

CLLocationCoordinate2D[] tmpTrail1 = new CLLocationCoordinate2D[]{
  new CLLocationCoordinate2D(32.751531, -97.361755),
  new CLLocationCoordinate2D(32.751451, -97.356625),
  new CLLocationCoordinate2D(32.751500, -97.332077),
};

CLLocationCoordinate2D[] tmpTrail2 = new CLLocationCoordinate2D[] {
  new CLLocationCoordinate2D(32.727353, -97.361139),
  new CLLocationCoordinate2D(32.747731, -97.359896),
  new CLLocationCoordinate2D(32.765735, -97.360360),
};

_trailOverlayPoints = new List<CLLocationCoordinate2D[]>();
_trailOverlayPoints.Add(tmpTrail1);
_trailOverlayPoints.Add(tmpTrail2);

我不会声明很多类,而是按如下方式解析 json 字符串

JArray jArr = (JArray)JsonConvert.DeserializeObject(jsonstr);
foreach (var item in jArr)
{
    foreach(var subitem in item["TrailCoordinates"])
    {
        Console.WriteLine(subitem["Longitude"] + " " + subitem["Latitude"]);
    }
}

如果单点触控支持dynamic你也可以写

dynamic jArr2 = JsonConvert.DeserializeObject(jsonstr);
foreach (dynamic item in jArr2)
{
    foreach (var subitem in item.TrailCoordinates)
    {
        Console.WriteLine(subitem.Longitude + " " + subitem.Latitude);
    }
}

您甚至可以使用 Linq

JArray jArr = (JArray)JsonConvert.DeserializeObject(jsonstr);
var coords = jArr
            .Select(x => x["TrailCoordinates"])
            .SelectMany(x=>x)
            .Where(x => x["TrailId"].ToString() == "40")
            .Select(x => new { Lat = double.Parse(x["Latitude"].ToString()), Lon=double.Parse(x["Longitude"].ToString()) })
            .ToArray();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Newtonsoft Json.NET 解析多维 JSON 数组 的相关文章

  • iPhone SDK - 在后台线程中运行重复进程

    我有一个iPhone我想在其中每隔一段时间在后台执行一个方法的应用程序1第二 所以在我的主线程中 我有以下代码UIViewController viewDidLoad NSTimer timerWithTimeInterval 1 0 ta
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • Monotouch 和本机 iOS 代码

    是否可以将使用 monotouch 编译的 C 库与单个应用程序中的 Objective C 前端链接起来 或者该应用程序必须是全部还是全无 这是可能的 但您不会从 MonoTouch 工具获得任何帮助 并且您无法摆脱这样一个事实 您仍然需
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 如何在ios中以编程方式添加水平间距和垂直间距?

    我在 ios 8 中创建了一个应用程序 因为我有 4 个可垂直使用的标签 它应该在某些条件下更改位置 所以我已禁用自动布局并以编程方式设置约束 现在的问题是 我可以设置水平和垂直位置 宽度和高度的约束 但我找不到任何方法来添加标签之间的水平
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 为什么 GDB 调试器不断冻结 Xcode 4?

    这真是一个奇怪的错误 我正在开发一个使用相机源的 iPhone 项目 并通过 OpenGL 着色器运行它以对其应用效果 然而 每次我在代码中简单地创建一个新的 GLfloat 时 调试器都会在启动时冻结 我无法复制和粘贴文本 因为整个 XC
  • 如何使导航栏透明并淡出,就像 iPhone 中的照片应用程序一样

    我是 iPhone 编程新手 有人可以帮我吗 我想在iPhone中开发一个类似照片应用程序的应用程序 如何使导航栏和工具栏透明并淡出 就像 iPhone 中的照片应用程序一样 感谢你 UINavigationBar继承自UIView 所以你
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 如何使用 afnetworking 在后台上传任务

    我正在尝试使用 AFNetworking 上传大文件 并在应用程序处于后台时继续上传 我可以很好地上传文件 但是当我尝试使用后台配置时 应用程序崩溃并显示以下堆栈跟踪 异常 EXC BAD ACCESS 代码 1 地址 0x8000001f
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐