【问题标题】:How to convert RealmResult to Json using Gson library如何使用 Gson 库将 RealmResult 转换为 Json
【发布时间】:2015-10-08 11:19:02
【问题描述】:

在这个问题How can I serialize a RealmObject to JSON in Realm for Java?领域代表说可以通过GSON序列化领域对象。你能解释一下如何吗? 我试过了。

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

但是发生了 StackOverflowError。

【问题讨论】:

    标签: json gson realm realm-list


    【解决方案1】:

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

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

    【讨论】:

    • 我如何传递 RealmResult 以及它将如何返回 json 字符串?请解释。我无法从上面的例子中得到。谢谢
    • 对不起,我第一次看错了你的问题。我已经通过答案修改了。
    【解决方案2】:

    你得到StackOverflow,因为Gson基于反射但托管对象(RealmObjectProxy)没有真正的字段,父字段是nulls还有一些代理字段在@的字段类型识别中产生递归987654326@ 它发生在$GsonTypes 类中。

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

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

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

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

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      更简单的方法是用RLMResult&lt;Dog&gt; 创建一个List&lt;Dog&gt;,然后用Gson 序列化这个List。

      【讨论】:

        【解决方案4】:

        经过两天的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);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多