Comment préserver les trames de la séquence d'Gson la sérialisation

Semble Gson.la méthode toJson(Object objet) génère du code JSON avec au hasard propagation des champs de l'objet. Est-il moyen de corriger les champs de l'ordre en quelque sorte?


    public class Foo {
            public String bar;
            public String baz;

            public Foo( String bar, String baz ) {
                    this.bar = bar;
                    this.baz = baz;
            }
    }

    Gson gson = new Gson();
    String jsonRequest = gson.toJson(new Foo("bar","baz"));

    //jsonRequest now can be { "bar":"bar", "baz":"baz" } (which is correct)
    //            and can be { "baz":"baz", "bar":"bar" } (which is a wrong sequence)

Grâce.

  • Pourquoi est-séquence pertinente? Cela indique un mauvais outil pour parser le JSON.
  • Je me demandais aussi pourquoi. Mais le serveur est un .NET application. Les auteurs de la demande disent qu'ils ont besoin le champ nommé "__type" (il pointe vers le schéma) pour être le premier parmi d'autres.
  • Wow. De toute façon, c'est possible avec un sérialiseur. J'ai posté une réponse.
  • J'aimerais présenter une pétition .NET app auteurs de jeter cette exigence et de mettre en œuvre plus robuste JSON traitement.
  • Si vous en avez l'occasion, vous pourrait également smack le .NET application des auteurs avec la spécification JSON, où, à propos de ce qu'est un objet JSON est, le dit clairement, "Un objet est une collection non ordonnée de zéro, une ou plusieurs paires nom/valeur..." [ietf.org/rfc/rfc4627.txt?number=4627] Donc, leur application de messagerie/l'API ne sont pas conformes à la spécification JSON. (Arguments comme cela a tendance à travailler particulièrement bien avec les amateurs de "enterprise architect" les gens.)
  • Je voulais un autre ordre des champs dans mon JSON, donc j'ai changé l'ordre des champs dans mon code source et ça a fait l'affaire pour moi. Peut-être, il peut aider d'autres personnes aussi bien. (GSON 2.6.2)
  • Peut-être que si vous voulez des métadonnées dans le début, vous voudriez que cette.
  • Une application qui analyse un grand document JSON comme un flux d'optimiser la consommation de mémoire si elle obtient les éléments dans l'ordre optimal. Le fait qu'une application ne peut pas compter sur l'ordre des champs ne signifie pas que le programmeur ne doit pas prendre un avantage si ils étaient dans l'ordre adéquat.
  • C'est pas ça le problème. Le principal problème est que la spécification JSON n'est nulle part besoin de commander des propriétés de l'objet. En d'autres termes, si vous essayez d'appuyer sur la commande ou propriétés de l'objet, puis, vous êtes essentiellement en essayant de s'appuyer sur quelque chose d'indéterminé. Et que fait le code fragiles et non portables. Juste utiliser des tableaux à la place. Leurs valeurs sont en papier doivent être dans l'ordre. Ensuite, vous pouvez supposer que n'importe quel outil qui massages chaînes JSON fonctionnera de la façon que vous attendez et vous pouvez bien sûr optimiser davantage sur ce point.
  • Veuillez lire ce que j'ai écrit.