Gsonを使用してアクティブなAndroidモデルをシリアル化します。モデルクラスにはプリミティブのみが含まれているため、Gsonはデフォルト設定でシリアル化しても問題ありません。ただし、試してみると、エラー:
Java.lang.UnsupportedOperationException: Attempted to serialize Java.lang.Class: <MyClass>. Forgot to register a type adapter?
モデルクラスのすべてに型アダプターを作成したくないのですが、どうすればこの問題を回避できますか?
理解した。もちろん、Active Androidの基本モデルクラスは、デフォルトではシリアル化できないフィールドを追加しています。これらのフィールドは、次のようにGsonのexcluedFieldsWithoutExposeAnnotation()
オプションを使用して無視できます。
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
String json = gson.toJson(new Book());
@Expose
アノテーションを使用してクラスを変更し、シリアル化する必要があるフィールドを示します。
@Table(name = "Foo")
public class Foo extends Model {
@Expose
@Column(name = "Name")
public String name;
@Expose
@Column(name = "Sort")
public int sort;
...
}
より簡単な方法は、Gsonを以下のように初期化して、Final、Transient、またはStaticフィールドのシリアル化を防ぐことです。
Gson gson = new GsonBuilder()
.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
.serializeNulls()
.create();