使用 Json.NET 和动态数据反序列化 JSON

2024-01-03

我正在尝试将一些 JSON 数据反序列化为应用程序的对象。到目前为止,一切都很好,因为 JSON 数据的属性是静态的(键和值)。现在我得到了一个结果,其中关键是动态数据。

下面是一个 JSON 网址示例:

生成的 JSON 是:

{ "query" : { "pages" : { "6695" : { "counter" : "",
          "lastrevid" : 468683764,
          "length" : 8899,
          "ns" : 0,
          "pageid" : 6695,
          "title" : "Citadel",
          "touched" : "2012-01-03T19:16:16Z"
        } } } }

好的,这很好,只是我无法将“页面”数据反序列化为对象。如果我要为页面定义一个类,它必须如下所示:

public class 6695
{
    public string counter { get; set; }
    public int lastrevid { get; set; }
    public int length { get; set; }
    public int ns { get; set; }
    public int pageid { get; set; }
    public string title { get; set; }
    public string touched { get; set; }
}

为了反序列化内容(使用 JsonConvert.Deserialize(jsondata)),我们都知道我们不能有一个名为 6695 的类。不仅如此,该类的名称必须不同(例如 pageid=7145 将必须是 7145 级)。

如果我使用 JObject.Parse(content) 之类的东西,然后以 JArray 的形式访问项目,我似乎可以提取一些值,但它非常难看,而且我仍然坚持尝试从页面数组中获取数据。

正在寻找人来帮助解决这个问题。我认为这并不罕见,它只是我以前遇到过的 JSON 数据,并且不知道如何处理它。

Thanks!

PS 忘记提及这是在 Windows Phone 7 上,所以“动态”不可用!


最简单的方法。在这种特殊情况下可能会去dynamic.

dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json);
var lastRevId = data.query.pages["6695"].lastrevid;

您可以通过它的引用任何元素[]名称,这样你就可以做类似的事情data["query"]["pages"]["6695"]["lastrevid"]。这将获得所有那些名称在 C# 中无效的小对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Json.NET 和动态数据反序列化 JSON 的相关文章

随机推荐