一尘不染

仅反序列化JSON文件的一个属性

json

我面临一个问题。我想反序列化来自服务器的复杂JSON响应,但是我只需要其中一部分。

这是一个例子:

{
 "menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
 }
}

我还使用Csharp2json获取所需的类对象,我只是根据需要修改了菜单类:

    public class Menuitem
{
    public string value { get; set; }
    public string onclick { get; set; }
}

public class Popup
{
    public IList<Menuitem> menuitem { get; set; }
}

public class Menu
{
    public Popup popup { get; set; }
}

public class RootObjectJourney
{
    public Menu menu { get; set; }
}

现在,如果我只需要popup值和他的孩子,我该如何反序列化?


阅读 250

收藏
2020-07-27

共1个答案

一尘不染

如果您想尝试一下,可以实际使用NewtonSoft.Json的Linq命名空间,并稍加修改代码以仅从JSON中获取“ popup”元素。

您的班级结构保持不变。确保使用名称空间

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

然后在代码中有了JSON字符串后,就可以使用“ JObject”静态方法“ Parse”来解析JSON,例如

   var parsedObject = JObject.Parse(jsonString);

这将为您提供一个JObject,您可以使用它像字典一样访问所有JSON键。

var popupJson = parsedObject["menu"]["popup"].ToString();

现在,此popupJson仅具有用于弹出键的JSON。这样,您可以使用JsonConvert来反序列化JSON。

var popupObj = JsonConvert.DeserializeObject<Popup>(popupJson);

此popupObj仅包含菜单项列表。

希望这可以帮助!

2020-07-27