2 votes

Désérialisation des objets JSON imbriqués avec ServiceStack

Je suis en train d'utiliser ServiceStack pour sérialiser/désérialiser les requêtes JSON. Ce que je souhaite faire, c'est prendre un objet JSON complexe (avec des objets imbriqués) et le convertir en un dictionnaire d'objets imbriqués (Dictionary).

Par exemple, si j'ai un objet JSON comme :

{ a: "monA",
  b: { "monB", true}
}

Je veux que le Dictionnaire reflète cela. Ainsi, pour chaque clé/valeur :

clé: a  valeur:  monA
clé: b  valeur:  Dictionary 
    clé: monB   valeur: true

J'ai essayé

var dict = JsonSerializer.DeserializeFromString>(requete);

et

var dict = JsonObject.Parse(requete);

Ce que j'obtiens finalement est :

clé: a  valeur:  monA
clé: b  valeur:  "monB:true" 

Notez que j'ai besoin que cela fonctionne pour des objets JSON imbriqués à l'infini (c'est-à-dire que je pourrais avoir 3, 4 ou même 5 niveaux de profondeur).

3voto

welegan Points 1367

J'ai essayé de le faire pour un module d'état de session personnalisé, et il y a de nombreux cas particuliers que vous devez prendre en compte lors de la sérialisation d'un objet pour lequel vous avez besoin des données de type en JSON, qui par défaut n'a aucune notion de type. Une façon facile de le faire est de forcer ServiceStack à sérialiser les informations de type dans le JSON en utilisant

JSConfig.includeTypeInfo = true;

dans votre méthode d'initialisation de AppHost. Cela indiquera à ServiceStack d'inclure la propriété "__type" dans chaque objet qu'il sérialise en JSON, y compris les chaînes de caractères, les entiers et les types de base. Cela représente beaucoup de surcharge, surtout si vous êtes dans un grand projet qui n'a pas besoin d'informations de type pour chaque sérialisation.

Alternativement, vous devrez implémenter votre propre système de type si vous le voulez juste pour cet objet imbriqué Dictionnaire. J'ai fini par le faire et cela a pris un certain temps pour y arriver.

Enfin, il y a ce post de Mythz (chef de ServiceStack) qui dit que si vous le sérialisez en tant qu'interface, il inclura les informations de type. J'ai vérifié indépendamment que c'est le cas, donc si vous avez le contrôle sur ce qui entre dans le Dictionnaire imbriqué et que vous pouvez les restreindre tous à une interface, vous pouvez réussir à le faire fonctionner.

info de type dans ServiceStack JSON

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X