[英]Deserialize JSON with Json.NET in Windows 8 Store App (C#)
我试图在Windows 8的Visual Studio 2012中使用C#编写Windows运行时组件,但通过使用Json.NET反序列化JSON这样,我遇到了一些问题:
{
"header": {
"id": 0,
"code": 0,
"hits": 10
},
"body": {
"datalist": [
{
"name": "",
"city": "",
"age": 0
},
{
"name": "",
"city": "",
"age": 0
},
{
"name": "",
"city": "",
"age": 0
}
]
}
}
我的意图是从中获得顶级词典,并将每个值解释为字符串。 对于此示例,您将获得一个包含两个键(标题和正文)以及匹配值作为字符串的字典。 之后,您可以沿着树走下去。 像这样的功能
Dictionary<string, string> jsonDict =
JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
会很好,但是这个只接受字符串值。 有人知道如何忽略类型或以其他方式获取它吗?
此外,要从正文值“ {“数据列表”:[{“名称”:“”,....}]}“中取出字典列表。
提前致谢!
如果您在定义类时遇到问题,VS 2012中的一项不错的功能允许您使用Edit
下的Paste Special
命令生成类来保存JSON / XML数据。 例如,您的JSON创建了此类:
public class Rootobject
{
public Header header { get; set; }
public Body body { get; set; }
}
public class Header
{
public int id { get; set; }
public int code { get; set; }
public int hits { get; set; }
}
public class Body
{
public Datalist[] datalist { get; set; }
}
public class Datalist
{
public string name { get; set; }
public string city { get; set; }
public int age { get; set; }
}
...然后您可以将您的请求反序列化为RootObject
的类型,例如
var obj = JsonConvert.DeserializeObject<RootObject>(json);
我会使用该网站并将其反序列化为
var myObj =JsonConvert.DeserializeObject<RootObject>(json);
public class Header
{
public int id { get; set; }
public int code { get; set; }
public int hits { get; set; }
}
public class Datalist
{
public string name { get; set; }
public string city { get; set; }
public int age { get; set; }
}
public class Body
{
public List<Datalist> datalist { get; set; }
}
public class RootObject
{
public Header header { get; set; }
public Body body { get; set; }
}
您也可以在不声明任何类的情况下使用dynamic
关键字
dynamic myObj =JsonConvert.DeserializeObject(json);
var age = myObj.body.datalist[1].age;
而且由于JObject实现IDictionary <>,所以这也是可能的
var jsonDict = JObject.Parse(json);
var age = jsonDict["body"]["datalist"][1]["age"];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.