我试图反序列化REST API调用的输出。 JSON的一个片段在这里:
"_links": {
"invoices": {
"href": "url",
"type": "application/json"
},
"members": {
"href": "otherurl",
"type": "application/json"
},
"paymentCard": {
"href": "yetanotherurl",
"type": "application/json"
},
"self": {
"href": "evenmoreurl",
"type": "application/json"
},
"session": {
"href": "andyesevenmoreurl",
"type": "application/json"
},
"subscription": {
"href": "tiredofurls",
"type": "application/json"
}
}
我想将它反序列化为以下类的字典:
public class Link
{
public string Name {get; set;}
public string Href {get; set;}
public string Type {get; set;}
}
字典将是
Dictionary<string, Link> = new Dictionary<string, Link>();
其中Name属性是键
我试图使用Newtonsoft的JSON Serializer。
这甚至可能吗?
答案 0 :(得分:1)
是的,你可以像这样得到你想要的字典:
Dictionary<string, Link> dict = JObject.Parse(json)
.SelectToken(".._links")
.Children<JProperty>()
.ToDictionary(jp => jp.Name, jp => new Link()
{
Name = jp.Name,
Href = (string)jp.Value["href"],
Type = (string)jp.Value["type"]
});
在这里,我使用Json.Net的LINQ-to-JSON API将JSON解析为JObject
。我使用SelectToken
方法和JsonPath expression递归地找到名为&#34; _links&#34;的第一个节点。 JSON中的任何地方。从那里,我得到子属性并将其转换为您所描述的链接字典。