Вопрос

В ответ на вопрос, который я задал несколько дней назад, я пытаюсь немного растянуть себя и сделать то, на чем я раньше особо не фокусировался. Я провел некоторый поиск (как здесь, так и в целом), но не могу найти ответы (или даже разумные намеки) на то, чего я хочу достичь (хотя некоторые вещи приближаются).

Обычно я пытаюсь десериализовать данные для файла закладок Google Chrome, используя Библиотека Json.NET (хотя, если есть лучшая альтернатива, я все за это - документация для этой библиотеки немного запутанная местами). Я немного озадачен следующим шагом, главным образом из-за того, что PHP привык к фантастической обработке данных JSON (используя json_decode () ), позволяющий один вызов функции, а затем простой доступ к ассоциативному массиву.

Библиотека (Json.NET) хочет, чтобы я указал тип объекта, в который она может десериализовать данные 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
}

Теперь, в 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);
        }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top