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

使用C#和Json.Net进行解析,c#,json,json.net,C#,Json,Json.net,API正在向我返回以下json: { "query":{ "pages":{ "49123":{ "pageid":49123, "ns":0, "title":"Phoenix (constellation)", "revisions":[ { "revid":588710862,

API正在向我返回以下json:

{
   "query":{
      "pages":{
         "49123":{
            "pageid":49123,
            "ns":0,
            "title":"Phoenix (constellation)",
            "revisions":[
               {
                  "revid":588710862,
                  "parentid":588710834
               }
            ]
         }
      }
   }
}
我使用json2csharp构建了一个表示这个json的类(我手动调整了PageInfo的名称,因为它对这个名称嗤之以鼻,并称它为\uuuuuuIvalid\uuuu49123

公共类修订
{
公共int revid{get;set;}
public int parentid{get;set;}
}
公共类页面信息
{
public int pageid{get;set;}
公共整数ns{get;set;}
公共字符串标题{get;set;}
公共列表修订{get;set;}
}
公共类页面
{
公共页面信息页面信息{get;set;}
}
公共类查询
{
公共页{get;set;}
}
公共类根对象
{
公共查询查询{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);
var json=“{\'query\':{\'pages\':{\'49123\':{\'pageid\':49123,\'ns\':0,\'title\':\'Phoenix(constellation)\',\'revisions\':[{\'revid\':588710862,\'parentid\':588710834}}}”;
//下面是json的未扩展版本
//{“查询”:{“页面”:{“49123”:{“页面ID”:49123,“ns”:0,“标题”:“凤凰(星座)”,“修订版”:[{“修订版”:588710862,“家长ID”:588710834}}}}}}
var root=JsonConvert.DeserializeObject(json);

我可以检查并看到root.query.pages都有值,但pageInfo为空。我不确定我遗漏了什么,这将允许我将这个json加载到一个对象中。

如下更改您的类定义。它会起作用的。。(参见
Query
class的定义)

公共类修订
{
公共int revid{get;set;}
public int parentid{get;set;}
}
公共类页面
{
public int pageid{get;set;}
公共整数ns{get;set;}
公共字符串标题{get;set;}
公共列表修订{get;set;}
}
公共类查询
{
公共字典页{get;set;}
}
公共类根对象
{
公共查询查询{get;set;}
}

这是因为
49123
未映射到
Pages
类中的
PageInfo
属性。这是一个有趣的情况,因为它看起来像
JSON
中的特定元素是
PageId
的值,因此对于
JSON
字符串的每个实例,它都是不同的。如果它是一个常量,您可以在
页面
类中的
页面信息
属性上使用
[JsonProperty(PropertyName=“Myname”)]
装饰+1来获得正确答案。你的答案有错<代码>查询类定义应如下。
公共类查询{public Dictionary pages{get;set;}}
。我更新了你的答案。我测试了这个,它工作了。@Shiva不,我的代码中没有
PageInfo
。我回滚了您的编辑。哦,刚才看到您将OP的
PageInfo
类更改为
Page
类。我复制了OP的代码并从代码中添加了
Query
类,没有注意到您重命名了
PageInfo
类。我的错。
        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);
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; }
}