Json.NET (Newtonsoft) 解析有点动态的数据 (c#)

Json.NET (Newtonsoft) to parse somewhat dynamic data (c#)

使用 c# - 我有一个有效的 json 字符串,我试图将它解析成一个字典,但我正在努力解决语法问题。

这是我要解析的数据示例:

{
  "data": {
    "KeyOne": {
      "val": "first!"
      "fooBar": "invalid data not needed",
    },
    "anotherKey": {
      "val": null
    },
    "TheThirdKey": {
      "val": 999
      "fooFooBarBar": "more unneeded data",
    },
    "KeyKeyKey": {
      "val": "super neato something"
    },
    ...

需要根据一些相当具体的规则将其移入 Dictionary<string, object>

  1. 不断变化的元素名称是关键('KeyOne'、'anotherKey'...)——这在数据集中是唯一的
  2. 对于字典值,我需要作为'val'值的字符串或数字或空值('first',空值, 999, ...)

所以我最终的字典应该是这样的:

"KeyOne"     : "first!"
"anotherKey" : null
"TheThirdKey": 999
"KeyKeyKey"  : "super neato something"

我尝试使用

的不同变体来解析它
JsonConvert.DeserializeObject<Dictionary<string, object>

我也试过这样遍历 jTokens:

JObject jObject = JObject.Parse(jsonString);
List<JToken> jTokens = jObject["data"].Children().ToList();
foreach (JToken jToken in jTokens) { ...

但经过这么多小时的尝试,我感到很尴尬......希望这可以用 Json.NET 执行,但我还没有弄清楚。

想法?

你可以这样做:

JObject jObject = JObject.Parse(jsonString);
var dataChildren = jObject["data"].Children().Cast<JProperty>();
Dictionary<string, object> result = dataChildren
       .ToDictionary(x => x.Name, x => x.Value["val"].Value<JValue>().Value);

你会得到 Dictionary<string,object> 作为结果