2016-01-26 10 views
8

Sto utilizzando Gson con Retrofit e ho un caso in cui ho bisogno di serializzare un singolo campo null, ma non posso attivare il serializeNulls globale() bandiera per Gson, perché romperà il resto del mio codice. Qualcuno sa come realizzare questo?GSON: serializzare un singolo campo null senza utilizzare il serializeNulls globale()

Ecco che cosa ho provato:

  • Fai un'annotazione, @SerializeNull. Questa sarebbe la soluzione ideale, ma non è riuscita perché il flag serializeNulls si trova effettivamente su JsonWriter, che è a valle di ExclusionStrategy.
  • Utilizzare TypeAdapterFactory. Ancora una volta, JsonWriter è a valle.

Inoltre non sono riuscito a trovare un modo per aggiungere al serial serializzato, poiché tutto ciò avviene all'interno di Retrofit.

risposta

0

Ho risolto questo problema modificando setSerializeNulls (true) e ripristinare il valore originale JsonWriter in 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

qual è l'attuazione del metodo di lettura? –

Problemi correlati