2009-03-06 17 views
7

Birkaç gün önce sorduğum bir soruya yanıt olarak, kendimi biraz esnetmeye çalışıyorum ve gerçekten çok fazla odaklanmadığım bir şey yapıyorum. Bazı aramalar yaptım (hem burada hem de genel olarak), ama ulaşmak istediklerime cevapları (hatta mantıklı ipuçlarını) bulamıyorum (ancak, birkaç şey yakın-ish).Chrome Bookmark JSON Verilerinin Serileştirilmesi C#

Temel olarak, Json.NET library'u kullanarak Google Chrome yer imleri dosyası verilerini kaldırmaya çalışıyorum (daha iyi bir alternatif varsa, bunun için hepim de olsa) - bu kitaplığın belgeleri biraz kafa karıştırıcı). Öncelikli olarak, PHP'nin JSON verilerini (json_decode() kullanarak) kullanarak tek bir işlev çağrısı ve daha sonra basit bir çağrışımsal-dizi erişimi için kullanılmasından dolayı, bir sonraki adımla ilgili olarak biraz kafam karıştı.

Kitaplık (Json.NET) JSON verilerinin seri hale getirilebileceği bir Nesne türü belirtmemi istiyor, ancak Yer İmleri dosyasının biçimi göz önüne alındığında böyle bir Nesnenin nasıl yapılandırılacağından emin değilim. kendisi. 'PHP'de, istediğim veri almak için, aşağıdakilerden çizgisinde bir şey yapıyor ve ile biten çok daha Kullanılmış olurdu,

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

Şimdi: formatlı çizgisinde bir şeydir Json.NET ':

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

ben halledebiliriz, basitçe yeterli, hangi verilerin (bir kök nesnesi gibi bir şey, o zaman bir yer imi listesi nesnesi ve nihayet bireysel imi nesne) temsil etmek nesneleri oluşturmak - ama Onları nasıl uygulayacağından emin değilim ve daha sonra kütüphaneyi ilgili nesnelere doğru şekilde serpiştirecek şekilde alın.

Sunulabilecek herhangi bir öneri çok takdir edilecektir.

+0

Katılıyorum, C# 1 fonksiyonlu JSON okuyucu olmalıdır. – Qwertie

cevap

12

Bu json yapısını yansıtan bir türü bildirmek gerekmez:

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

Derlenmeyecek. Bunun yerine JsonTextReader kullanmanız gerektiğini düşünüyorum. –

+0

Ayrıca, JavaScriptObject hakkında bir şey bulamıyorum, hangi ad alanı bir parçası? Hızlı bir Google, belirli bir şeyi ortaya çıkarır. –

+0

Üzgünüz, Json.NET aksamının eski bir sürümünü kullanıyordum. API'nın o zamandan beri değiştiğini görüyorum. Benim yazıyı buna göre değiştirdim –

İlgili konular