la personnalisation de la sérialisation java des collections à l'aide xstream
J'ai un objet qui doit être sérialisé en XML, qui contient les champs suivants:
List<String> tags = new List<String>();
XStream serialises c'est très bien (après quelques alias) comme ceci:
<tags>
<string>tagOne</string>
<string>tagTwo</string>
<string>tagThree</string>
<string>tagFour</string>
</tags>
C'est OK comme il va, mais j'aimerais être capable de renommer le <string>
éléments à, disons, <tag>
. Je ne peux pas voir un moyen évident de le faire à partir de l'alias de la documentation sur le XStream site. Ai-je raté quelque chose d'évident?
OriginalL'auteur Will Goring | 2009-11-24
Vous devez vous connecter pour publier un commentaire.
Je te suggère de changer le
List<String>
à unList<Tag>
, où la Balise est un objet de domaine essentiellement contient une Chaîne de caractères. Ensuite, vous dites:et vous obtenez exactement ce que vous voulez. Cela évite d'avoir à rouler votre propre Convertisseur.
Pourriez-vous préciser comment les class de la Balise pourrait être? Si je garde une variable de chaîne (dire tagValue), j'obtiens quelque chose comme <tags><tag><tagValue>tagOne</tagValue></tag><tag><tagValue>tagTwo</tagValue></tag></tags>. Merci à l'avance.
Comme Jonna dit ci-dessus, je ne pense pas que cela vous donnera le résultat que vous voulez, à moins que je me manque quelque chose. Je l'ai juste essayé et trouvé les mêmes que Jonna. La solution ci-dessous à l'aide de la CollectionConverter et ClassAliasingMapper fait ce que j'avais en seulement 3 lignes de code.
OriginalL'auteur
Intérêt, j'ai essayé de le faire sans avoir à écrire de ma propre convertisseur. Fondamentalement, j'ai juste un registre spécial chargé version de
CollectionConverter
pour un certain champ dans une certaine classe.Pertinentes extrait de:
Complet exemple:
Pas encore testé mais cela devrait fonctionner. Non?
Cette solution fonctionne parfaitement. Testé sur XStream 1.3.1. Will > comment est-il possible? ce genre d'aliasing se fait uniquement sur le champ "tags" de la classe de Test et tous les autres de la collection dans la classe de Test est un alias par défaut des paramètres de XStream les contributeurs (ie. ils ont la même représentation xml comme vous l'écrivez dans votre post initial -> <balises> <string>...</string></tags>).
Va Gorings commentaire se rapporte à la première version de ma réponse. Qui est le oneliner au-dessous de la ligne horizontale
OriginalL'auteur
résultat xml:
OriginalL'auteur
Ajouter un alias pour le
java.util.String
classe. Bon, qui peuvent se transformer en quelque chose d'autre ailleurs, mais dans ce cas précis cela devrait être suffisant.Si vous ne voulez pas faire la chose ci-dessus, vous pouvez faire votre propre convertisseurs (voir ce tutoriel pratique) qui vous aidera à atteindre votre objectif. Et n'ayez pas peur de faire votre propre convertisseur soit, ils sont vraiment facile à mettre en œuvre.
OriginalL'auteur
et dans ListToStringXStreamConverter.java
OriginalL'auteur
pour moi fonctionne avec le code ci-dessous, à l'aide de Cordes:
OriginalL'auteur