gpt4 book ai didi

c# - 在 C# 中反序列化 Chrome 书签 JSON 数据

转载 作者:太空狗 更新时间:2023-10-29 20:06:39 24 4
gpt4 key购买 nike

为了回答我几天前提出的一个问题,我正试图让自己稍微舒展一下,做一些我以前没有真正关注过的事情。我已经进行了一些搜索(在这里和一般情况下),但找不到我想要实现的目标的答案(甚至合理的提示)(尽管有一些事情很接近)。

基本上,我正在尝试使用 Json.NET library 反序列化 Google Chrome 书签文件的数据。 (不过,如果有更好的选择,我完全赞成——这个库的文档在某些地方有点困惑)。对于要采取的下一步,我有点困惑,主要是因为习惯了 PHP 对 JSON 数据的出色处理(使用 json_decode() ),允许单个函数调用,然后进行简单的关联数组访问。

库 (Json.NET) 希望我指定一个对象类型,它可以将 JSON 数据反序列化为该类型,但鉴于书签文件本身的格式,我不确定如何构建这样一个对象.格式类似于:

{
"roots": {
"bookmark_bar": {
"children": [ {
"children": [ {
"date_added": "12880758517186875",
"name": "Example URL",
"type": "url",
"url": "http://example.com"
}, {
"date_added": "12880290253039500",
"name": "Another URL",
"type": "url",
"url": "http://example.org"
} ],
"date_added": "12880772259603750",
"date_modified": "12880772452901500",
"name": "Sample Folder",
"type": "folder"
}, {
"date_added": "12880823826333250",
"name": "Json.NET",
"type": "url",
"url": "http://james.newtonking.com/pages/json-net.aspx";
} ],
"date_added": "0",
"date_modified": "12880823831234250",
"name": "Bookmarks bar",
"type": "folder"
},
"other": {
"children": [ ],
"date_added": "0",
"date_modified": "0",
"name": "Other bookmarks",
"type": "folder"
}
},
"version": 1
}

现在,在 PHP 中,我更习惯于按照以下方式做一些事情,以获取我想要的数据,并以“Json.NET”结尾:

$data['roots']['bookmark_bar']['children'][0]['name'];

我可以很简单地计算出要创建哪些对象来表示数据(类似于根对象,然后是书签列表对象,最后是单个书签对象)——但我真的不确定如何实现它们,然后让库正确反序列化为相关对象。

如能提供任何建议,我们将不胜感激。

最佳答案

没有必要声明一个反射(reflect)json结构的类型:

    using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
using System;

class Program
{
static void Main(string[] args)
{
string json =
@"
{
""roots"": {
""bookmark_bar"": {
""children"": [ {
""children"": [ {
""date_added"": ""12880758517186875"",
""name"": ""Example URL"",
""type"": ""url"",
""url"": ""http://example.com""
}, {
""date_added"": ""12880290253039500"",
""name"": ""Another URL"",
""type"": ""url"",
""url"": ""http://example.org""
} ],
""date_added"": ""12880772259603750"",
""date_modified"": ""12880772452901500"",
""name"": ""Sample Folder"",
""type"": ""folder""
}, {
""date_added"": ""12880823826333250"",
""name"": ""Json.NET"",
""type"": ""url"",
""url"": ""http://james.newtonking.com/pages/json-net.aspx""
} ],
""date_added"": ""0"",
""date_modified"": ""12880823831234250"",
""name"": ""Bookmarks bar"",
""type"": ""folder""
},
""other"": {
""children"": [ ],
""date_added"": ""0"",
""date_modified"": ""0"",
""name"": ""Other bookmarks"",
""type"": ""folder""
}
},
""version"": 1
}
";
using (StringReader reader = new StringReader(json))
using (JsonReader jsonReader = new JsonTextReader(reader))
{
JsonSerializer serializer = new JsonSerializer();
var o = (JToken)serializer.Deserialize(jsonReader);
var date_added = o["roots"]["bookmark_bar"]["children"][0]["date_added"];
Console.WriteLine(date_added);
}
}

关于c# - 在 C# 中反序列化 Chrome 书签 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/619120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com