2009-03-06 2 views
7

私は数日前に尋ねた質問に答えて、私は少し自分自身を伸ばそうとしています。私はいくつかの検索(ここと一般的に)を行ってきましたが、達成したいことに答え(あるいは合理的なヒント)を見つけることはできません。Chromeのブックマーク解除JSONデータのC#

基本的には、私はJson.NET libraryを使ってGoogle Chromeのブックマークファイルのデータを逆シリアル化しようとしています(しかし、もっと良い選択肢があれば、私はそれだけです - このライブラリのドキュメントは少し混乱します)。私は次のステップとして、PHPの素晴らしいJSONデータ処理(json_decode()を使用)に慣れて、単一の関数呼び出しを可能にし、単純な連想配列アクセスを使用することで、少し混乱します。

ライブラリ(Json.NET)では、JSONデータを逆シリアル化できるオブジェクト型を指定したいと思っていますが、ブックマークファイルの形式では、このようなオブジェクトを構造化する方法はわかりません自体。 「PHPで、私は私が望んでいたデータを取得するには、以下の線に沿って何かをやって、として終わるまでずっと使用されると思い、

{ 
    "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 
} 

今:フォーマットはの線に沿って何かでありますJson.NET ':

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

私はデータを表現するために(ルートオブジェクトのようなもの、そして、ブックマークリストオブジェクト、および最終的には個々のブックマークオブジェクト)を作成するために、どのオブジェクト、単純に十分な、出て作業することができます - しかし、私は実際にそれらを実装する方法については確信が持たれておらず、ライブラリを適切なオブジェクトに正しくデシリアライズするようにします。

アドバイスをいただければ幸いです。これは、JSONの構造を反映したタイプ宣言する必要はありません

+0

を、C#が1機能JSONリーダーを持っている必要があります。 – Qwertie

答えて

12

:私は同意

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); 
     } 
    } 
+0

コンパイルされません。代わりにJsonTextReaderを使うつもりだと思います。 –

+0

また、私はJavaScriptObjectについて何も見つかりません。その名前空間には何が含まれていますか?クイックグーグルは、何も具体的なものではない –

+0

申し訳ありません、私はJson.NETアセンブリの古いバージョンを使用していました。私はAPIが以来変わってきたことを知っています。私はそれに応じて私の投稿を変更しました –

関連する問題