【发布时间】:2017-06-22 14:00:20
【问题描述】:
我遇到了一个问题。 我想反序列化来自服务器的复杂 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; }
}
现在,如果我只需要弹出值和他的孩子,我该如何反序列化?
【问题讨论】:
-
你为什么不把所有的响应都隐藏起来,只选择弹出窗口?对所有响应进行去现实化只是比您的情况所需的成本略高
-
你所拥有的应该已经做你所描述的。当你通过反序列化器运行它时会发生什么?即
var root = JsonConvert.DeserializeObject<RootObjectJourney>(json); var menuitems = root.menu.popup.menuitem;? -
在这种情况下,我会反序列化所有的东西。但这只是我实际 Json 的简化。在这个 url 上执行 Get 请求以获取实际的 json:transport.opendata.ch/v1/… 它非常复杂且冗长。 @MarcGravell 它说“对象引用未设置为对象的实例。”
-
@A.Silva 那么您的缩减模型与实际数据不匹配;我不能告诉你在哪里,因为你链接的 JSON 与你提供的模型无关
-
@MarcGravell,也许我没有理解 100% 的错误。
标签: c# json visual-studio json.net