使用C#和Json.Net进行解析
API正在向我返回以下json:使用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,
{
"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; }
}