Domanda

In risposta a una domanda che ho posto qualche giorno fa, sto tentando di allungarmi un po 'e di fare qualcosa su cui non mi ero davvero concentrato molto prima. Ho fatto qualche ricerca (sia qui, sia in generale), ma non riesco a trovare le risposte (o anche i suggerimenti ragionevoli) a ciò che voglio ottenere (anche se alcune cose si avvicinano).

Fondamentalmente, sto cercando di deserializzare i dati per il file dei segnalibri di Google Chrome utilizzando Libreria Json.NET (sebbene, se esiste un'alternativa migliore, sono tutto per quello - la documentazione per questa libreria è un po 'confusa in alcuni punti). Sono un po 'confuso riguardo al prossimo passo da fare, dovuto principalmente all'utilizzo della fantastica gestione dei dati JSON da parte di PHP (usando json_decode () ), consentendo una singola chiamata di funzione, quindi un semplice accesso ad array associativo.

La libreria (Json.NET) vuole che specifichi un tipo di oggetto in cui possa deserializzare i dati JSON, ma non sono davvero sicuro di come strutturare un tale oggetto, dato il formato del file dei segnalibri stesso . Il formato è qualcosa del tipo:

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

Ora, in PHP, sarei molto più abituato a fare qualcosa in linea con quanto segue, per ottenere i dati desiderati e finire con "Json.NET":

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

Posso capire, semplicemente, quali oggetti creare per rappresentare i dati (qualcosa come un oggetto radice, quindi un oggetto elenco segnalibri e infine un singolo oggetto segnalibro) - ma non sono davvero sicuro di come per implementarli e quindi far deserializzare correttamente la libreria negli oggetti rilevanti.

Qualsiasi consiglio che può essere offerto sarebbe molto apprezzato.

È stato utile?

Soluzione

Non è necessario dichiarare un tipo che rifletta la struttura 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);
        }
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top