繁体   English   中英

使用C#和Json.Net进行解析

[英]Using C# and Json.Net for parsing

一个API正在向我返回以下json:

{
   "query":{
      "pages":{
         "49123":{
            "pageid":49123,
            "ns":0,
            "title":"Phoenix (constellation)",
            "revisions":[
               {
                  "revid":588710862,
                  "parentid":588710834
               }
            ]
         }
      }
   }
}

我使用json2csharp来构建一个代表这个json的类(我手动调整了PageInfo的名称,因为它正在咳嗽这个名字并称之为__invalid_type__49123

public class Revision
{
    public int revid { get; set; }
    public int parentid { get; set; }
}

public class PageInfo
{
    public int pageid { get; set; }
    public int ns { get; set; }
    public string title { get; set; }
    public List<Revision> revisions { get; set; }
}

public class Pages
{
    public PageInfo pageInfo { get; set; }
}

public class Query
{
    public Pages pages { get; set; }
}

public class RootObject
{
    public Query query { get; set; }
}

并试图解析它:

        var json = "{\"query\":{\"pages\":{\"49123\":{\"pageid\":49123,\"ns\":0,\"title\":\"Phoenix (constellation)\",\"revisions\":[{\"revid\":588710862,\"parentid\":588710834}]}}}}";
        // unescaped version of json below
        // {"query":{"pages":{"49123":{"pageid":49123,"ns":0,"title":"Phoenix (constellation)","revisions":[{"revid":588710862,"parentid":588710834}]}}}}

        var root = JsonConvert.DeserializeObject<RootObject>(json);

我可以检查并看到root.query.pages都有值,但pageInfo为null。 我不知道我错过了什么,这将允许我将这个json加载到一个对象中。

更改您的课程定义如下。 它会工作..(参见Query类的定义)

public class Revision
{
    public int revid { get; set; }
    public int parentid { get; set; }
}

public class Page
{
    public int pageid { get; set; }
    public int ns { get; set; }
    public string title { get; set; }
    public List<Revision> revisions { get; set; }
}

public class Query
{
    public Dictionary<string,Page>  pages { get; set; }
}

public class RootObject
{
    public Query query { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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