Pregunta

En respuesta a una pregunta que hice hace unos días, intento estirarme un poco y hacer algo en lo que no me he centrado mucho antes. He realizado algunas búsquedas (tanto aquí como en general), pero no puedo encontrar las respuestas (o incluso sugerencias razonables) a lo que quiero lograr (aunque, algunas cosas se acercan).

Básicamente, estoy tratando de deserializar los datos del archivo de marcadores de Google Chrome usando Biblioteca Json.NET (aunque, si hay una mejor alternativa, estoy de acuerdo con eso: la documentación de esta biblioteca es un poco confusa en algunos lugares). Estoy un poco confundido sobre el siguiente paso a seguir, debido principalmente a que estoy acostumbrado al manejo fantástico de PHP de datos JSON (usando json_decode () ), que permite una llamada de función única y luego un simple acceso de matriz asociativa.

La biblioteca (Json.NET) quiere que especifique un tipo de Objeto en el que pueda deserializar los datos JSON, pero no estoy realmente seguro de cómo estructurar dicho Objeto, dado el formato del archivo de Marcadores en sí . El formato es algo similar a:

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

Ahora, en PHP, estaría mucho más acostumbrado a hacer algo como lo siguiente, para obtener los datos que quería y terminar con 'Json.NET':

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

Puedo calcular, simplemente, qué objetos crear para representar los datos (algo así como un objeto raíz, luego un objeto de lista de marcadores y, finalmente, un objeto de marcador individual), pero realmente no estoy seguro de cómo para implementarlos y luego hacer que la biblioteca se deserialice en los objetos relevantes correctamente.

Cualquier consejo que se pueda ofrecer sería muy apreciado.

¿Fue útil?

Solución

No es necesario declarar un tipo que refleje la estructura 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);
        }
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top