2014-01-16 3 views
1

я не могу найти никакой документации по этому вопросу, но, кажется, Gson сериализует поля подкласса перед теми из супер-класса:Сериализовать подкласс после суперкласса?

class G9 { 
    static class B { String s1 = "1"; String s2 = "2"; } 
    static class C extends B { String s3 = "3"; } 
    public static void main(String args[]) { 
    System.out.println(new Gson().toJson(new C())); 
    } 
} 

Эта программа производит следующий вывод:

/cygdrive/c/Java/jdk1.8.0/bin/javac -classpath gson-2.1.jar -g G9.java && /cygdrive/c/Java/jdk1.8.0/bin/java -classpath ".;gson-2.1.jar" G9 
{"s3":"3","s1":"1","s2":"2"} 

I хотелось бы, чтобы это было следующее:

{"s1":"1","s2":"2","s3":"3"} 

Я понимаю, что я могу сделать это с TypeAdapter но по существу составляет

  • реализации сериализации
  • выяснить, как делегировать десериализации в Gson ИЛИ реализации, что хорошо.

Есть ли более простой способ достичь этого? Я думаю, я ищу new FieldOrderingTypeAdapter<C>(C.class, "s1", "s2", "s3") или GsonBuilder.setFieldOrder("s1", "s2", "s3") или что-то в этом роде.

Я использую Gson 2.1.

+1

Дело в том, что даже если вы каким-то образом определяете порядок, который должен использоваться для генерации полей, вывод JSON может не отражать этот порядок. Порядок элементов в объекте JSON не может быть указан или контролироваться. –

+0

@HotLicks, я думаю, что ключевая фраза здесь «может не отразиться». Я признаюсь, что не тестировал с помощью «TypeAdapter», а предположил, что произведенная строка json будет соответствовать порядку вызовов JsonWriter.write, вероятно, исходя из опыта использования другой сериализации. Вы знаете, что это ложь? –

+0

Это может соответствовать сегодняшнему, а не завтра. Зависеть от этого было бы глупостью (если только инструмент не описывает это поведение). –

ответ

1

От JSON order mixed up:

Вы не можете и не должны полагаться на упорядочение элементов в пределах объекта JSON.

Из спецификации JSON в http://www.json.org/

An object is an unordered set of name/value pairs 

Как следствие, JSON библиотеки могут свободно изменять порядок элементов, как они считают нужным. Это не ошибка.

Насколько я знаю, нет простого способа обойти это.

+0

Я не думал, что это ошибка. Реальность такова, что файл должен быть прочитан людьми - поддержкой, разработчиками. Будет хорошо видеть это в естественном порядке, и библиотека не будет несовместимой, если она позволит указать порядок –

Смежные вопросы