获取特定的json元素

时间:2018-01-12 23:41:48

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

我在这里找不到类似的案子,因此我的问题。我有一个像这样的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,但实际上并不知道该怎么做。有人指导吗?谢谢! 罗纳德

3 个答案:

答案 0 :(得分:1)

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

您需要做的第一步是:

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

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

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

即可

答案 1 :(得分:0)

我想,一旦你从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);

会给你类似的东西

enter image description here

答案 2 :(得分:0)

我建议你使用Jil库,比Newtonsoft.json更快更简单