【问题标题】:Get specific json elements获取特定的 json 元素
【发布时间】:2018-01-12 23:41:48
【问题描述】:

我在这里找不到类似的案例,因此我提出了问题。我有一个这样的json:

{
  "prop1": "bla",
  "propn": "bla",
  "Data": {
    "42": {
      "prop1": "bla",
      "prop2": "bla",
      "Symbol": "42"
    },
    "abc": {
      "prop1": "bla",
      "prop2": "bla",
      "Symbol": "abc"
    }
  },
  "Type": 100
}

现在,我如何从 Data 中获取所有元素,而我最感兴趣的是那些设置了 symbol 属性的元素。我尝试了 Newtonsoft.json.linq 和 jobject,但真的不知道在这里做什么。任何指导任何人?谢谢! 罗纳德

【问题讨论】:

标签: c# .net json linq json.net


【解决方案1】:

您要查找的内容称为“反序列化”。你有一个字符串(你发布的 json),你想把它变成一个对象。

您需要做的第一步是:

  • 创建一个与您的数据匹配的类。 只需在您的帖子中复制您的 json 字符串,然后使用 Visual Studio 中的选项“将 JSON 粘贴为类”。或许可以通过将名称 RootObject 更改为更具描述性的名称来清理它。
  • 在 Visual Studio 中安装 NuGet 包 Newtonsoft。

现在你可以使用MyClass myObject = JsonConvert.DeserializeObject<MyClass>(myString);

要访问Symbol只需使用myObject.Data.Symbol

【讨论】:

    【解决方案2】:

    我想一旦你从 json 中提取部分数据,如果你仍然需要通过你的应用程序传递数据,一个专用的模型会派上用场。

    public class Data
    {
        public Element abc { get; set; }
    }
    
    public class Element 
    {
        public string prop1 { get; set; }
        public string prop2 { get; set; }
        public string Symbol { get; set; }
    }
    

    虽然您当然可以依靠 JObject 处理反序列化,但我发现使用 anonymous templates 更直观,尤其是对于部分数据检索。

    var template = new
    {
        Data = default(Data)
    };
    
    var instance = JsonConvert.DeserializeAnonymousType(json, template);
    

    会给你类似的东西

    【讨论】:

      【解决方案3】:

      我推荐你使用 Jil 库,比 Newtonsoft.json 更快更简单

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-16
        • 1970-01-01
        相关资源
        最近更新 更多