加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用JSon.NET对动态数据进行反序列化

发布时间:2020-12-16 19:47:58 所属栏目:百科 来源:网络整理
导读:我试图将一些JSON数据反序列化为应用程序的对象。到目前为止,这是很好的,因为JSON数据上的属性是静态的(带有值的键)。现在我得到了一个关键是一个动态数据的结果。 以下是JSON网址的示例: http://en.wikipedia.org/w/api.php?action=queryformat=jsonpage
我试图将一些JSON数据反序列化为应用程序的对象。到目前为止,这是很好的,因为JSON数据上的属性是静态的(带有值的键)。现在我得到了一个关键是一个动态数据的结果。

以下是JSON网址的示例:

http://en.wikipedia.org/w/api.php?action=query&format=json&pageids=6695&prop=info

得到的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)这样的东西,然后访问JArrays的项目,我似乎可以提取一些值,但是它非常丑陋,我仍然坚持尝试从pages数组中获取数据。

寻找一个人来帮助这个。我不认为这是不常见的,它只是我以前遇到的JSON数据,不知道如何处理它。

谢谢!

PS忘了提到这是Windows Phone 7所以“动态”是不可用的!

这是您如何使用 https://github.com/facebook-csharp-sdk/simple-json( https://nuget.org/packages/SimpleJson)。
var text = "{"query":{"pages":{"6695":{"pageid":6695,"ns":0,"title":"Citadel","touched":"2012-01-03T19:16:16Z","lastrevid":468683764,"counter":"","length":8899}}}}";

(使用动态)

dynamic json = SimpleJson.DeserializeObject(text);
string title = json.query.pages["6695"].title;

foreach (KeyValuePair<string,dynamic> page in json.query.pages)
{
    var id = page.Key;
    var pageId = page.Value.pageid;
    var ns = page.Value.ns;
}

(使用强类型的类)

class result
{
    public query query { get; set; }
}
class query
{
    public IDictionary<string,page> pages { get; set; }
}
class page
{
    public long pageid { get; set; }
    public string title { get; set; }
}

var result = SimpleJson.DeserializeObject<result>(text);

[更新]

在Windows手机上,动态不支持,您不想使用强类型的类。

var json = (IDictionary<string,object>)SimpleJson.DeserializeObject(text);
var query = (IDictionary<string,object>)json["query"];
var pages = (IDictionary<string,object>)query["pages"];
var pageKeys = pages.Keys;
var page = (IDictionary<string,object>)pages["6695"];
var title = (string)page["title"];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读