正确解析 JObject
Posted
技术标签:
【中文标题】正确解析 JObject【英文标题】:Parsing JObject properly 【发布时间】:2021-12-15 06:42:53 【问题描述】:我想解析下面的json
"status": 1,
"data":
"xyz": [
[
3.5927680391473826,
0.5641835941824296,
-0.88546609584117
],
[
3.5885032091080853,
0.7537851201209402,
-0.9748245317650808
]
],
"xy": [
[
479,
32
],
[
435,
85
]
]
我正在使用下面的代码来做到这一点,
resultantData = JObject.Parse(inputString)
List<float> xyz = resultantData["data"]["xyz"].Value<List<List<float>>>();
List<int> xy = resultantData["data"]["xy"].Value<List<int>>();
很遗憾,上述代码无法正确解析 JSON。我错过了什么?
【问题讨论】:
确切的错误或问题是什么?我的猜测是您需要List<List<float>> three_d_pt
,而另一个也应该是列表列表。
它不会抛出任何错误。它只是停止工作。由于我使用 unity ,所以很难调试
【参考方案1】:
我认为你可以使用 JsonConvert.DeserializeObject 来做到这一点
var result = JsonConvert.DeserializeObject<Root>(inputString);
public partial class Root
[JsonProperty("status")]
public long Status get; set;
[JsonProperty("data")]
public Data Data get; set;
public partial class Data
[JsonProperty("xyz")]
public List<List<double>> Xyz get; set;
[JsonProperty("xy")]
public List<List<long>> Xy get; set;
【讨论】:
如果数据是可选的呢?【参考方案2】:你有列表列表,而不仅仅是列表
List<List<float>> xyz = resultantData["data"]["xyz"].ToObject<List<List<float>>>();
List<List<int>> xy = resultantData["data"]["xy"].ToObject<List<List<int>>>();
你可以这样使用它
if (xyz != null && xyz.Count > 0)
List<float> xyz1 = xyz[0];
如果你想把所有东西都放在一堆,我认为这不是一个好主意,你必须试试这个
List<float> xyz = resultantData["data"]["xyz"].ToObject<List<List<float>>>()
.SelectMany(i=> i).ToList();
List<int> xy = resultantData["data"]["xy"].ToObject<List<List<int>>>()
.SelectMany(i=> i).ToList();
【讨论】:
应该加倍吗? 由你决定,我不知道你需要在Unity中使用什么类型。您可以毫无问题地将其更改为双精度或小数。以上是关于正确解析 JObject的主要内容,如果未能解决你的问题,请参考以下文章