2009-03-06 28 views
7

में एक प्रश्न के जवाब में मैंने कुछ दिन पहले पूछा था, मैं खुद को थोड़ा सा खींचने का प्रयास कर रहा हूं, और कुछ ऐसा करता हूं जिसे मैंने वास्तव में पहले से ध्यान केंद्रित नहीं किया है। मैंने कुछ खोज (यहां दोनों, और सामान्य रूप से) की है, लेकिन मुझे जो हासिल करना है, उसके जवाब (या यहां तक ​​कि उचित संकेत) नहीं मिल पा रहे हैं (हालांकि, कुछ चीजें करीब-करीब आती हैं)।क्रोम बुकमार्क Deserializing सी #

असल में, मैं Json.NET library का उपयोग कर Google क्रोम बुकमार्क्स फ़ाइल के डेटा को deserialize करने की कोशिश कर रहा हूं (हालांकि, यदि कोई बेहतर विकल्प है, तो मैं इसके लिए सब कुछ कर रहा हूं - इस पुस्तकालय के लिए दस्तावेज स्थानों में थोड़ा उलझन में है)। मैं अगले कदम के लिए थोड़ा उलझन में हूं, मुख्य रूप से जेएसओएन डेटा (json_decode() का उपयोग करके) के PHP के शानदार हैंडलिंग के लिए उपयोग किया जा रहा है, जो एक एकल फ़ंक्शन कॉल की अनुमति देता है, और फिर सरल सहयोगी-सरणी पहुंच प्रदान करता है।

लाइब्रेरी (जेसन.NET) मुझे एक ऑब्जेक्ट प्रकार निर्दिष्ट करना चाहता है कि यह JSON डेटा को deserialize कर सकता है, लेकिन मुझे सचमुच यकीन नहीं है कि इस तरह के ऑब्जेक्ट को संरचित करने के बारे में कैसे जाना है, बुकमार्क फ़ाइल के स्वरूप को देखते हुए अपने आप।

{ 
    "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']; 

मैं काम कर सकते हैं, बस पर्याप्त, क्या डेटा (एक रूट वस्तु की तरह कुछ है, तो एक बुकमार्क सूची वस्तु, और अंत में एक व्यक्ति बुकमार्क वस्तु) का प्रतिनिधित्व करने के बनाने के लिए वस्तुओं - लेकिन मुझे वास्तव में यह सुनिश्चित नहीं है कि उन्हें कैसे कार्यान्वित किया जाए, और फिर पुस्तकालय को प्रासंगिक वस्तुओं में सही तरीके से deserialize करने के लिए मिलता है।

कोई भी सलाह जो पेशकश की जा सकती है उसकी सराहना की जाएगी।

+0

मैं मानता हूँ, सी # एक 1-समारोह JSON पाठक होना चाहिए। – Qwertie

उत्तर

12

यह एक प्रकार है कि 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); 
     } 
    } 
+0

संकलित नहीं होगा। मुझे लगता है कि आप इसके बजाय JsonTextReader का उपयोग करना चाहते थे। –

+0

इसके अतिरिक्त, मुझे जावास्क्रिप्ट ऑब्जेक्ट के बारे में कुछ भी नहीं मिला है, इसका नाम क्या है? एक त्वरित Google कुछ भी विशिष्ट नहीं बदलता है। –

+0

क्षमा करें, मैं Json.NET असेंबली का पुराना संस्करण उपयोग कर रहा था। मैं देखता हूं कि एपीआई बदल गया है। मैंने –

संबंधित मुद्दे