2

在这个问题中,如何在 Realm for Java 中将 RealmObject 序列化为 JSON?领域代表说可以通过GSON序列化领域对象。你能解释一下如何吗?我试过这个。

 RealmResults<Dog> myDogs=realm.where(Dog.class).findAll();
 new Gson().toJson(myDogs);

但是发生了 StackOverflowError。

4

4 回答 4

1

要使 GSON 序列化与 Realm 一起工作,您需要为每个可以序列化的对象编写自定义 JsonSerializer 并将其注册为 TypeAdapter。

您可以在此要点中看到一个示例:https ://gist.github.com/cmelchior/ddac8efd018123a1e53a

于 2015-10-08T11:45:31.567 回答
1

StackOverflow由于Gson基于反射,但托管对象( )没有RealmObjectProxy真正的字段,并且父字段是nulls 也是一些代理字段在字段类型识别中产生递归,Gson它发生在$GsonTypes类中。

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

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

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

  3. 使用基于第二个选项RealmSupportForGson的库

希望能帮助到你

于 2017-09-28T19:40:59.867 回答
0

更简单的方法是创建一个List<Dog>with RLMResult<Dog>,然后用 Gson 序列化这个 List。

于 2015-10-27T15:37:25.970 回答
0

经过两天的错误解决,我找到了这个简单的解决方案:

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);
}
于 2021-12-17T16:21:52.557 回答