Question

En réponse à une question que j'ai posée il y a quelques jours, j'essaie de m'étirer un peu et de faire quelque chose sur lequel je ne me suis pas vraiment concentré. J'ai fait quelques recherches (ici et en général), mais je ne trouve pas les réponses (ni même des astuces raisonnables) à ce que je veux réaliser (cependant, certaines choses se rapprochent).

En gros, j'essaie de désérialiser les données du fichier de favoris Google Chrome à l'aide du . Bibliothèque Json.NET (cependant, s’il existe une meilleure alternative, je suis tout à fait partisan de cela - la documentation de cette bibliothèque est un peu déroutante par endroits). Je suis un peu confus quant à la prochaine étape à franchir, principalement parce que je suis habitué au traitement fantastique des données JSON par PHP (avec json_decode () ), permettant un appel de fonction unique, puis un accès simple à un tableau associatif.

La bibliothèque (Json.NET) veut que je spécifie un type d'objet dans lequel elle peut désérialiser les données JSON, mais je ne sais pas trop comment structurer un tel objet, étant donné le format du fichier de marque-pages lui-même. . Le format ressemble à quelque chose comme:

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

Maintenant, en PHP, je serais beaucoup plus habitué à faire quelque chose comme ceci, pour obtenir les données que je voulais, et me retrouver avec 'Json.NET':

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

Je peux trouver, assez simplement, les objets à créer pour représenter les données (un objet racine, puis un objet de la liste de signets et enfin un objet de signet individuel) - mais je ne sais vraiment pas comment pour les implémenter, puis que la bibliothèque soit désérialisée correctement dans les objets appropriés.

Tout conseil pouvant être offert serait grandement apprécié.

Était-ce utile?

La solution

Il n'est pas nécessaire de déclarer un type reflétant la structure 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);
        }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top