2015-04-28 12 views
15

Sto usando Gson per serializzare un modello Android attivo. La classe del modello contiene solo le primitive e Gson non dovrebbe avere problemi a serializzarlo con le impostazioni predefinite. Tuttavia, quando provo, ottengo l'errore:Gson e Active Android: Tentativo di serializzare java.lang.Class. Hai dimenticato di registrare un adattatore di tipo?

java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: <MyClass>. Forgot to register a type adapter?

vorrei davvero preferirei non scrivere un adattatore di tipo per ognuno dei miei classi di modelli, come posso ottenere intorno a questo problema?

risposta

22

Capito. Naturalmente, la classe del modello base di Active Android sta aggiungendo campi che non possono essere serializzati per impostazione predefinita. Questi campi possono essere ignorati utilizzando l'opzione di GSON excluedFieldsWithoutExposeAnnotation(), come segue:

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 
String json = gson.toJson(new Book()); 

modificare la classe con la @Expose un'annotazione per indicare quali campi dovrebbe essere serializzato:

@Table(name = "Foo") 
public class Foo extends Model { 

    @Expose 
    @Column(name = "Name") 
    public String name; 

    @Expose 
    @Column(name = "Sort") 
    public int sort; 

    ... 
} 
+0

Dove impostare Gson in applicazione per ActiveAndroid come Gson gson = new GsonB . Uilder() excludeFieldsWithoutExposeAnnotation() create().; – ahmadalibaloch

13

un modo più semplice è quello di inizializzare il GSON come sotto per impedire la serializzazione dei campi Finale, Transitorio o Statico

Gson gson = new GsonBuilder() 
      .excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC) 
      .serializeNulls() 
      .create(); 
+0

Questa è la soluzione perfetta. Le soluzioni di cui sopra rendono "mId" null così model.delete(); causa un'eccezione del puntatore nullo. –

+0

Dove impostare l'impostazione Gson nell'applicazione per ActiveAndroid come Gson gson = new GsonBuilder(). ExcludeFieldsWithoutExposeAnnotation(). Create(); – ahmadalibaloch

+0

lo uso come singleton – mehdi

Problemi correlati