^--- 对于断言问题只是重复的断言的反驳,请参见底部的注释。
剧透:根据 carldevelopsforcoffee 接受的有效答案,请参阅问题底部的最终代码。
原始问题:
我正在尝试使用 UnityEngine.JsonUtility.FromJson() 在 Unity(2018.1,VS2015,如果重要)中使用 C# 解析复杂的 JSON 文件(见下文)。解析器代码如下所示。
顶级变量(sweepIndex、totalRadials 等)都可以很好地解析到 Sweep 对象中,但“radials”数组似乎被跳过了(Sweep 中的 Radial 对象列表最终为空)。
如果从 JSON 中不明显,它具有以下结构:
具有 13 个简单值和一组 Radial 对象的顶级“Sweep”对象。
List 中的每个 Radial 对象都有 4 个简单值和一个双精度数组
格式化 JSON 以说明结构:
(为清楚起见,已编辑和截断......完整的 JSON 是下面类中的字符串)
{"sweepIndex":0,
"totalRadials":720,
"beamWidth":0.949999988079071,
"startingUnixtime":1536864392000,
"endingUnixtime":1536863574000,
"totalGatesPerRay":1832,
"gateDepthMeters":250.0,
"distanceToFirstGateMeters":2125.0,
"meanElevationDeg":0.5275726318359375,
"originLatitude":33.989444444444445,
"originLongitude":-78.42888888888889,
"originAltitude":20.0,
"deviantOriginCount":0,
"radials": [
{"radialNumber":0,"azimuthDeg":263.21319580078125,"elevationDeg":0.53009033203125,"duration":66521592,
"gateIntensity":[-5.5,-1.0,1.0,3.0,13.5,-15.0,-13.0,-11.5,-10.5,-7.5]},
{"radialNumber":1,"azimuthDeg":263.7432861328125,"elevationDeg":0.5328369140625,"duration":66521616,
"gateIntensity":[-9.5,-1.0,-4.5,-2.5,5.0,-4.0,9.0,-8.5,-1.5,-9.0]}
]}
我是生成 JSON 文件的人(使用 Netcdf-Java 吸入原始的 2 级雷达数据并将其作为 JSON 吐出以供 Unity 应用程序使用),所以如果 JSON 极大地改善了我的生活,我可能会更改它更容易......但我真的更喜欢不大幅改变整体结构(使用带有双精度数组的径向对象数组的扫描对象)。
用户“程序员”表示这是一个所谓的重复的问题的答案实际上并不能解决我所说的问题 - Unity中的复杂JSON 。它确定 Unity 内置的 JsonUtility 类不足以解析复杂的 JSON,同时没有提供真正的替代方案。
关于将第三方 Json 库与 C# 一起使用的问题存在于 SO 上……但在 Unity 项目中使用第三方库和 C#如果它们尚未作为 .unitypackage 提供,则它们的任务更加困难和具体,特别是如果它最终需要能够在 Windows 以外的平台上运行(例如,Android、Magic Leap、Oculus 等)。
这就是为什么这个问题的公认答案很有价值,并为 SO 作为一种资源增加了具体价值......它确定了一个解决问题的三个具体问题的解决方案——复杂的 Json、C#,并让它在 Unity 中的平台中工作-不可知论的方式。
湖上湖
茅侃侃
慕标5832272
相关分类