【问题标题】:Extract array values from Dictionary<string, object>从 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&lt;Dictionary&lt;string, object&gt;&gt;(responseString);反序列化了它。

我现在正在尝试提取scat5SymptomsQs 中的数组值。我该怎么做?

【问题讨论】:

  • 是否有任何特别的理由将其反序列化为字典而不是表示此结构的类?
  • 值["scat5SumptomsQs"] ?
  • 最终我会有不同的结构,所以我想在进入类结构之前反序列化为一些常见的东西。另外,要知道使用什么类结构,我需要“DataType”。如果有更好的方法来做到这一点,我很想听听。
  • 如果不消毒到特定类型,则坚持使用JObject 类型。

标签: c# arrays .net json.net


【解决方案1】:

Dictionary&lt;string,object&gt; 是错误的类型。创建一个代表对象的类。

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();

【讨论】:

    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2023-03-17
    • 2012-03-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    相关资源
    最近更新 更多