2009-03-06 9 views
7

나는 며칠 전에 내가 묻는 질문에 대해 약간의 스트레칭을 시도하고, 전에별로 집중하지 않은 것을 시도하고있다. 나는 약간의 검색 (여기와 일반적으로)을했지만, 내가 달성하기를 원하는 것에 대한 해답 (또는 합리적인 힌트)을 찾을 수는 없다. (하지만, 몇 가지 가깝다.)C#의 JSR 데이터 북마크 해제 JSON 데이터

기본적으로 Json.NET library을 사용하여 Google 크롬 북마크 파일의 데이터를 비 직렬화하려고합니다. (더 나은 대안이 있다면,이 모든 것을 다룰 수 있습니다.이 라이브러리의 설명서는 다소 혼란 스럽습니다.). 필자는 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']; 

내가 해결할 수는, 단순히만큼, 어떤 데이터를 (루트 객체 같은, 다음 즐겨 찾기 목록 객체, 그리고 마지막으로 개인 책갈피 개체)를 표현하기 위해 생성하는 객체 -하지만 나는 그것들을 구현하는 방법에 관해서 정말로 확신 할 수 없다. 그리고 라이브러리가 관련 객체들로 deserialize하도록한다.

제안 할 수있는 조언은 크게 감사하겠습니다.

+0

동의를 C#을 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

또한 JavaScriptObject에 대한 정보를 찾을 수 없습니다. 어떤 네임 스페이스가 포함되어 있습니까? 빠른 Google은 아무 것도 나타낼 수 없습니다. –

+0

죄송합니다. 이전 버전의 Json.NET 어셈블리를 사용하고있었습니다. API가 변경된 것을 볼 수 있습니다. 나는 그에 맞게 내 게시물을 수정했습니다. –