当前位置: 首页 > 面试题库 >

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

杨君之
2023-03-14
问题内容

我面临一个问题。我想反序列化来自服务器的复杂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值和他的孩子,我该如何反序列化?


问题答案:

如果您想尝试一下,可以实际使用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仅包含菜单项列表。

希望这可以帮助!



 类似资料:
  • 问题内容: 我正在针对返回JSON数据的第三方API进行编程,但是格式可能有点奇怪。某些属性可以是一个对象(包含一个Id属性),也可以是一个字符串(它是该对象的ID)。例如,以下两个都是有效的: 和 我正在尝试使用JSON.net将其反序列化为强类型类,但到目前为止运气还不足。我最好的主意是将其序列化为两个属性,一个为字符串,另一个为对象,并为每个属性使用自定义JsonConverter以允许变量

  • 问题内容: 使用Jackson 2,我正在寻找一种 通用的 方式将对象序列化为单个值(然后序列化它们,然后再填充该单个字段),而不必重复创建JsonSerializer / JsonDeserializer来处理每种情况。@JsonIdentityInfo批注非常接近,但由于我知道,它将始终对完整的子对象进行序列化,因此略微遗漏了该标记。 这是我想做的一个例子。给定的类: 我希望Order可以序列

  • 问题内容: 我需要反序列化一些JSON表示的JavaScript对象为适当的C#类。鉴于自动属性的出色功能,我宁愿将它们放在这些类中,而不是仅包含字段。不幸的是,.NET序列化引擎(至少默认情况下)完全忽略了反序列化的自动属性,而只关心背景字段,而该字段显然不在JavaScript对象中。 鉴于没有标准的方法来命名后备字段并且说实话,我什至不想使用“让我们创建一个看起来像具有C#后备字段的Java

  • 问题内容: 我将反序列化的json文件的结构如下所示; 我创建了一个类,该类具有文件名作为JavaScriptSerializer的属性。我将用于反序列化json的代码如下; ``` using (var reader = new StreamReader(twitpicResponse.GetResponseStream())) { ``` 最好的情况是什么? 问题答案: 您需要创建一个包含用户

  • 1) json: 2) 代码: 错误消息为: 我检查了json文件,它是有效的。 我不知道发生了什么事。

  • 假设我们有以下JSON, 在Java类中,我们有与上述JSON匹配的所有字段。 每次要反序列化的字段列表取决于发送信息的客户。 例如,对于customer 1,我们只想读回以下值,(并且跳过其他属性,即使在JSON中提供) 例如,对于客户2,我们希望读取以下值(并跳过其他属性,即使在JSON中提供) 使用Jackson反序列化JSON时,是否可以提供上面的数组,其中包括需要反序列化的字段, 更新: