我面临一个问题。我想反序列化来自服务器的复杂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仅包含菜单项列表。
希望这可以帮助!