如何使用 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 是 nulls 还有一些代理字段在 Gson 的字段类型识别中产生递归,它发生在 $GsonTypes class 中。

要序列化 ​​RealmObject,您可以使用以下选项之一:

  1. 为每个 RealmObject 将使用 getter 获取数据的孩子编写自己的适配器。

  2. 在序列化之前调用realm.copyFromRealm(realmObject)。它看起来像 new Gson().toJson(realm.copyFromRealm(realmObject))

  3. 根据第二个选项使用库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);
}