繁体   English   中英

在Windows 8 Store App(C#)中使用Json.NET反序列化JSON

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM