2015-04-28 10 views
15

Używam Gson do serializacji aktywnego modelu Android. Klasa modelu zawiera tylko prymitywy, a Gson nie powinien mieć problemów z serializacją z domyślnymi ustawieniami. Jednak, gdy próbuję, pojawia się błąd:Gson i Active Android: podjęto próbę serializowania java.lang.Class. Zapomniałeś zarejestrować adapter typu?

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

ja naprawdę nie raczej napisać adapter typu dla każdego z moich klasach modelowych, jak mogę ominąć ten problem?

Odpowiedz

22

Wyliczyłem to. Oczywiście klasa bazowa Active Android dodaje pola, które domyślnie nie mogą być serializowane. Pola te mogą być ignorowane przy użyciu excluedFieldsWithoutExposeAnnotation() opcję Gson w następujący sposób:

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

Modyfikuj klasę z @Expose adnotacją w celu wskazania, które pola należy odcinkach:

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

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

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

    ... 
} 
+0

Gdzie ustawić ustawienie Gson w aplikacji dla ActiveAndroid takich jak Gson gson = new GsonB uilder(). excludeFieldsWithoutAnnotation(). create(); – ahmadalibaloch

13

łatwiejszym sposobem jest zainicjować Gson jak poniżej, aby zapobiec serializowaniu pól Final, Transient lub Static

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

To jest idealne rozwiązanie. Powyższe rozwiązania powodują, że "mId" null to model.delete(); powoduje wyjątek wskaźnika pustego. –

+0

Gdzie ustawić ustawienie Gson w aplikacji dla ActiveAndroid takich jak Gson gson = new GsonBuilder(). ExcludeFieldsWithoutExposeAnnotation(). Create(); – ahmadalibaloch

+0

Użyj go jako singleton – mehdi

Powiązane problemy