Json.NET(Newtonsoft)解析一些动态数据(c#)

时间:2017-02-24 20:33:19

标签: c# json serialization deserialization json-deserialization

使用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. 不断变化的元素名称是关键(&#39; KeyOne&#39;,&#39; anotherKey&#39; ...) - 这在数据集中是唯一的
  2. 对于字典值,我需要字符串或数字或null,即&#39; val&#39; (&#39; first&#39;,null,999,...)
  3. 所以我的最后一本字典应该是这样的:

    "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执行,但我还没弄明白。

    思想?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

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>