反序列化json并获取特定数据的方法

时间:2015-09-03 14:55:56

标签: c# json parsing

我有一个关于反序列化json数据的问题。我的json数据就像那样

{
"batchcomplete": "",
"query": {
    "pages": {
        "62413": {
            "pageid": 62413,
            "ns": 0,
            "title": "espri"
        }
    }
}

}

我想获取页面ID或只是数字。号码" 62413"正在改变每个不同的请求。

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public void readString()
    {
        requestHelper _req = null;

        HttpClient client = new HttpClient();
        HttpResponseMessage response = client.GetAsync("https://tr.wiktionary.org/w/api.php?action=query&titles=espri&format=json").Result;
        //var categories = new object { };

        if (response.IsSuccessStatusCode)
        {
            var content = response.Content.ReadAsStringAsync().Result;
            //categories = response.Content.ReadAsStringAsync();

            //dynamic a = JsonConvert.DeserializeObject(content);
            //Dictionary<string, object> dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(content);

            var b = JObject.Parse(content).Descendants().ToArray();
            var art = b[9];

            _req = new requestHelper { _result = 1, _message = content };

        }

        HttpContext.Current.Response.Write(new JavaScriptSerializer().Serialize(_req));
    }


}

我的代码是这样的,这解决了我的问题,但我不认为这是最好的方法。我的问题是,有什么不同的方法可以得到我想要的东西吗?我尝试使用字典,但我无法弄明白。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用此模型

public class Page
{
    public int pageid { get; set; }
    public int ns { get; set; }
    public string title { get; set; }
}

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


public class WiktionaryResponse
{
    public string batchcomplete { get; set; }
    public Query query { get; set; }
}

并反序列化为

var obj = JsonConvert.DeserializeObject<WiktionaryResponse>(json);