在这个问题中,如何在 Realm for Java 中将 RealmObject 序列化为 JSON?领域代表说可以通过GSON序列化领域对象。你能解释一下如何吗?我试过这个。
RealmResults<Dog> myDogs=realm.where(Dog.class).findAll();
new Gson().toJson(myDogs);
但是发生了 StackOverflowError。
在这个问题中,如何在 Realm for Java 中将 RealmObject 序列化为 JSON?领域代表说可以通过GSON序列化领域对象。你能解释一下如何吗?我试过这个。
RealmResults<Dog> myDogs=realm.where(Dog.class).findAll();
new Gson().toJson(myDogs);
但是发生了 StackOverflowError。
要使 GSON 序列化与 Realm 一起工作,您需要为每个可以序列化的对象编写自定义 JsonSerializer 并将其注册为 TypeAdapter。
您可以在此要点中看到一个示例:https ://gist.github.com/cmelchior/ddac8efd018123a1e53a
StackOverflow
由于Gson
基于反射,但托管对象( )没有RealmObjectProxy
真正的字段,并且父字段是null
s 也是一些代理字段在字段类型识别中产生递归,Gson
它发生在$GsonTypes
类中。
要序列化RealmObject
,您可以使用以下选项之一:
RealmObject
为每个使用 getter 获取数据的孩子编写自己的适配器。
realm.copyFromRealm(realmObject)
在序列化之前调用。它看起来像new Gson().toJson(realm.copyFromRealm(realmObject))
使用基于第二个选项RealmSupportForGson的库
希望能帮助到你
更简单的方法是创建一个List<Dog>
with RLMResult<Dog>
,然后用 Gson 序列化这个 List。
经过两天的错误解决,我找到了这个简单的解决方案:
YourRealmObject realmObj = realm.where(YourRealmObject.class).findFirst();
if(realmObj != null) {
realmObj = realm.copyFromRealm(realmObj); //detach from Realm, copy values to fields
String json = gson.toJson(realmObj);
}