GSON: Serialisieren Sie ein einzelnes Null-Feld ohne Verwendung der globalen serializeNulls ()

8

Ich benutze Gson mit Retrofit, und ich habe einen Fall, in dem ich ein einzelnes Nullfeld serialisieren muss, aber ich kann das globale serializeNulls () - Flag für Gson nicht einschalten, weil es den Rest meines Codes bricht. Weiß jemand, wie man das erreicht?

Folgendes habe ich versucht:

  • Machen Sie eine Anmerkung, @SerializeNull. Dies wäre die ideale Lösung, aber es ist fehlgeschlagen, weil das serializeNulls-Flag sich tatsächlich auf dem JsonWriter befindet, der sich hinter der ExclusionStrategy befindet.
  • Verwenden Sie eine TypeAdapterFactory. Auch hier ist der JsonWriter downstream.

Ich konnte auch keinen Weg finden, den serialisierten JSON hinzuzufügen, da alles innerhalb von Retrofit passiert.

    
GLee 26.01.2016, 02:30
quelle

2 Antworten

0

Ich habe dieses Problem gelöst, indem ich setSerializeNulls (true) gesetzt habe und den ursprünglichen Wert in TypeAdapter.write () in JsonWriter wiederhergestellt habe:

%Vor%     
Andriy Petruk 29.06.2017 13:51
quelle
0

Hier ist eine Erweiterung von Andriys Lösung, die nicht nur für NullableDouble funktioniert, sondern generisch jeden Typ umschließt. Der Nachteil gegenüber plain serializeNulls() ist, dass es erforderlich ist, die GsonForceNull -Instanz als Wrapper zu erstellen und auf den value innerhalb des gesamten Java-Codes zuzugreifen (obwohl geeignete Getter / Setter-Implementierungen dieses Detail verbergen können).

%Vor%

Beispielverwendung:

%Vor%     
Philipp 27.03.2018 19:04
quelle

Tags und Links