2016-01-26 14 views
8

Używam Gson z funkcją Retrofit i mam przypadek, w którym muszę serializować pojedyncze puste pole, ale nie mogę włączyć globalnego serializowaniaNulls() flagę dla Gson, ponieważ złamie resztę mojego kodu. Czy ktoś wie, jak to osiągnąć?GSON: Serializuj pojedyncze puste pole bez używania globalnej serialiNulls()

Oto co próbowałem:

  • Złóż adnotacja @SerializeNull. Byłoby to idealne rozwiązanie, ale nie powiodło się, ponieważ flaga serialiNulls znajduje się w JsonWriter, która znajduje się poniżej strategii ExclusionStrategy.
  • Użyj TypeAdapterFactory. Ponownie JsonWriter jest w dalszym ciągu.

Nie mogłem również znaleźć sposobu na dodanie do serializowanego json, ponieważ wszystko dzieje się w Modernizacji.

Odpowiedz

0

I rozwiązać ten problem przez ustawienie setSerializeNulls (prawda) i przywrócenie pierwotnej wartości JsonWriter w TypeAdapter.write():

public class NullableDoubleAdapter extends TypeAdapter<NullableDouble> { 

    @Override 
    public void write(final JsonWriter out, final NullableDouble value) throws IOException { 
    if (value == null) { 
     boolean serializeNulls = out.getSerializeNulls(); 
     out.setSerializeNulls(true); 
     out.nullValue(); 
     out.setSerializeNulls(serializeNulls); 
    } else { 
     out.value(value.getValue()); 
    } 
    } 
... 
+0

co jest wdrożenie metody odczytu? –

Powiązane problemy