从 Dictionary<string, object> 中提取数组值
Posted
技术标签:
【中文标题】从 Dictionary<string, object> 中提取数组值【英文标题】:Extract array values from Dictionary<string, object> 【发布时间】:2021-07-18 10:19:15 【问题描述】:我有这个 Json:
"DataType": "Calibration_Symptoms",
"playerHeight": 1.6739861965179443,
"armSpan": 1.572389006614685,
"calibratedHeadPosition":
"x": 0.10129322111606598,
"y": 1.6739861965179443,
"z": -0.01975761353969574
,
"symptomSeverity": 0,
"scat5SymptomsQs": [1, 2, 3],
"rightHanded": true,
"rightFooted": true,
"testType": false,
"trialSymptomsQs":
"Gait": [1, 2, 3],
"Balance1": []
我用var values = JsonConvert.DeserializeObject<Dictionary<string, object>>(responseString);
反序列化了它。
我现在正在尝试提取scat5SymptomsQs
中的数组值。我该怎么做?
【问题讨论】:
是否有任何特别的理由将其反序列化为字典而不是表示此结构的类? 值["scat5SumptomsQs"] ? 最终我会有不同的结构,所以我想在进入类结构之前反序列化为一些常见的东西。另外,要知道使用什么类结构,我需要“DataType”。如果有更好的方法来做到这一点,我很想听听。 如果不消毒到特定类型,则坚持使用JObject
类型。
【参考方案1】:
Dictionary<string,object>
是错误的类型。创建一个代表对象的类。
class Data
public List<int> scat5SymptomsQs get; set;
那么你可以:
var o = JsonConvert.DeserializeObject<Data>(json);
如果您不想创建对象,请参阅LINQ to JSON。
using System.Linq;
using Newtonsoft.Json.Linq;
(...)
JObject o = JObject.Parse(json);
IList<int> x = o["scat5SymptomsQs"].Select(t => (int)t).ToList();
【讨论】:
以上是关于从 Dictionary<string, object> 中提取数组值的主要内容,如果未能解决你的问题,请参考以下文章
将 Dictionary<string, object> 转换为匿名对象?
类型不匹配。预期解码 Dictionary<String, Any> 但找到了一个数组
将 [Dictionary<String,Any?>] 转换为 [Dictionary<String,Any!>] ?迅速 3
如何在 C# 中将 Dictionary<string, object> 转换为 Dictionary<string, string>
Swift4 JSONDecoder 期望解码 Dictionary<String, Any> 但找到了一个数组 [重复]