如何使用 Gson 库将 RealmResult 转换为 Json
How to convert RealmResult to Json using Gson library
在这个问题中领域代表说可以通过GSON序列化领域对象。你能解释一下吗?
我试过了。
RealmResults<Dog> myDogs=realm.where(Dog.class).findAll();
new Gson().toJson(myDogs);
但是发生了 WhosebugError。
要使 GSON 序列化与 Realm 一起工作,您需要为每个可以序列化的对象编写自定义 JsonSerializer,并将其注册为 TypeAdapter。
你可以在这个要点中看到一个例子:https://gist.github.com/cmelchior/ddac8efd018123a1e53a
更简单的方法是用 RLMResult<Dog>
创建一个 List<Dog>
,然后用 Gson 序列化这个列表。
你得到 Whosebug
因为 Gson
基于反射但是管理 object (RealmObjectProxy
) 没有真正的领域和领域 parent 是 null
s 还有一些代理字段在 Gson
的字段类型识别中产生递归,它发生在 $GsonTypes
class 中。
要序列化 RealmObject
,您可以使用以下选项之一:
为每个 RealmObject
将使用 getter 获取数据的孩子编写自己的适配器。
在序列化之前调用realm.copyFromRealm(realmObject)
。它看起来像 new Gson().toJson(realm.copyFromRealm(realmObject))
根据第二个选项使用库RealmSupportForGson
希望对您有所帮助
经过两天的 bug 解决,我找到了这个简单的解决方案:
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);
}
在这个问题中
RealmResults<Dog> myDogs=realm.where(Dog.class).findAll();
new Gson().toJson(myDogs);
但是发生了 WhosebugError。
要使 GSON 序列化与 Realm 一起工作,您需要为每个可以序列化的对象编写自定义 JsonSerializer,并将其注册为 TypeAdapter。
你可以在这个要点中看到一个例子:https://gist.github.com/cmelchior/ddac8efd018123a1e53a
更简单的方法是用 RLMResult<Dog>
创建一个 List<Dog>
,然后用 Gson 序列化这个列表。
你得到 Whosebug
因为 Gson
基于反射但是管理 object (RealmObjectProxy
) 没有真正的领域和领域 parent 是 null
s 还有一些代理字段在 Gson
的字段类型识别中产生递归,它发生在 $GsonTypes
class 中。
要序列化 RealmObject
,您可以使用以下选项之一:
为每个
RealmObject
将使用 getter 获取数据的孩子编写自己的适配器。在序列化之前调用
realm.copyFromRealm(realmObject)
。它看起来像new Gson().toJson(realm.copyFromRealm(realmObject))
根据第二个选项使用库RealmSupportForGson
希望对您有所帮助
经过两天的 bug 解决,我找到了这个简单的解决方案:
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);
}