C#でのChromeブックマークJSONデータの逆シリアル化
-
03-07-2019 - |
質問
数日前に尋ねた質問に答えて、私は少し自分自身を伸ばそうとし、あまり焦点を当てていないことをしようとしています。私はいくつかの検索を行いましたが(ここでも、一般的にも)、私が達成したいことに対する答え(または妥当なヒントさえ)を見つけることができません(ただし、いくつかは近づいています)。
基本的に、を使用して、Google Chromeブックマークファイルのデータをデシリアライズしようとしています。 Json.NETライブラリー(ただし、より良い代替案があれば、私はそれですべてです-このライブラリーのドキュメントは場所が少しわかりにくいです)。主にPHPのJSONデータの素晴らしい処理に慣れているために、次のステップについて少し混乱しています( json_decode())、単一の関数呼び出し、そして単純な連想配列アクセスを許可します。
ライブラリ(Json.NET)は、JSONデータを逆シリアル化できるObject型を指定することを望んでいますが、Bookmarksファイル自体の形式を考えると、そのようなObjectを構造化する方法についてはよくわかりません。形式は次のようなものです:
{
"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'];
データを表現するために作成するオブジェクト(ルートオブジェクト、次にブックマークリストオブジェクト、最後に個々のブックマークオブジェクトなど)を作成することができます-しかし、どのようにそれらを実装し、ライブラリを取得して関連するオブジェクトに正しくデシリアライズします。
提供できるアドバイスは大歓迎です。
解決
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);
}
}