Gson et la désérialisation d'un tableau d'objets avec des tableaux en elle
Je suis en train d'utiliser Gson pour désérialiser une chaîne json retourné de mon webservice
La structure serait retourné comme TypeDTO[]
.
où TypeDTO
est comme
int id;
String name;
ArrayList<ItemDTO> items[]
et ItemDTO est comme
int id;
String name;
Boolean valid;
Lorsque j'appelle le code comme suit
Gson gson = new Gson();
TypeDTO[] mytypes = (TypeDTO[]) gson.fromJson(reply, TypeDTO[].class);
Tout à l'intérieur des objets est null
Cependant, Si j'utilise le
JSONArray
et JSONObject
pour sortir pièce par pièce à partir de l'organisation.json pots, il fonctionne très bien et les champs sont remplis en conséquence.
Aucune idée de ce que je fais mal? est Gson extrêmement rapide?
Ou suis-je mieux de coller avec ce que j'ai obtenu de travail déjà?
Grâce,
David
- Vous avez besoin de donner plus d'informations. Quel est le format du JSON que vous recevez? Pourquoi avez-vous un tableau de
ArrayList
dans votreTypeDTO
? Gson gère ce genre de chose amende. - J'ai pensé que j'ai donné une image claire de l'JSON. Haut niveau est une liste d'objets. Chaque objet possède plusieurs kv paires, l'un d'eux étant une autre liste d'objets avec plus de kv paires.
- Je pense que programmeur-bruce réponse du mérite Marqué Accepté
Vous devez vous connecter pour publier un commentaire.
L'exemple de Java structure de données dans la question d'origine ne correspond pas à la description de la structure JSON dans le commentaire.
Le JSON est décrit comme
En termes de types décrits dans la question, le JSON traduit en Java structure de données qui correspondent à la structure JSON pour faciliter la désérialisation avec Gson est
Mais le Java structure de données fournies dans la question, n'est-ce pas. C'est plutôt
Un tableau à deux dimensions != un seul tableau multidimensionnel.
Ce premier exemple illustre l'utilisation de Gson simplement désérialiser et sérialiser une structure JSON qui est "un tableau de {objet avec un tableau de {objet}}".
d'entrée.json Contenu:
Foo.java:
Ce deuxième exemple utilise à la place une structure JSON qui est en fait "un tableau de {TypeDTO objet avec un tableau d'un tableau de {ItemDTO objet}}" pour correspondre à l'origine fournis Java structure de données.
d'entrée.json Contenu:
Foo.java:
Concernant les deux autres questions:
Pas par rapport à d'autres désérialisation/de sérialisation des Api. Gson a traditionnellement été parmi la plus lent. Les prochaines versions de Gson aurait comprennent des améliorations de performances significatives, bien que je n'ai pas regardé pour le dernier test de performance des données à l'appui de ces revendications.
Cela dit, si Gson est assez rapide pour vos besoins, puis comme il fait JSON désérialisation si facile, il fait probablement de sens pour l'utiliser. Si l'amélioration des performances est nécessaire, puis Jackson pourrait être un meilleur choix pour les utiliser. Il offre beaucoup (peut-être même la totalité) des convenances de Gson.
Je ne le ferais pas. J'aimerais le plus, toujours plutôt qu'une simple ligne de code comme
...facilement désérialiser dans une structure de données complexe, que les trente lignes de code qui seraient autrement nécessaires pour cartographier les morceaux ensemble en un seul composant à la fois.
Utiliser votre bean classe comme ça, si vos données JSON commence avec un tableau d'objet. il vous aide.
Utilisateurs est ma classe d'haricot.
Réponse est mes données JSON.