【问题标题】:Is it possible to convert Realm Object to JSON Object?是否可以将 Realm 对象转换为 JSON 对象?
【发布时间】:2017-03-23 11:15:58
【问题描述】:

我在将对象列表从我的 Realm 数据库发送到 Web 服务器时遇到问题。当没有检测到互联网连接时,应用程序应该在本地保存交易(我使用领域数据库)。然后,当应用程序检测到互联网连接时,我的领域数据库中的数据应该使用 JSON 格式发送到 Web 服务器。 蒂亚。

【问题讨论】:

  • Realm 对象是 java 对象,所以是的,有可能..
  • 我用 GSON 尝试了 Realm,但我无法将 Realm 对象变成 POJO。
  • 使用gson.toJson(realm.copyFromRealm(myObj))。这应该是开箱即用的。

标签: android json realm


【解决方案1】:

是的,你可以,但你必须为你的班级注册TypeAdapter,并为你的班级定义一个排除策略扩展RealmObject

例如,您有一个 User 类,如下所示:

public class User extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
    private String email;

    // Getter and setter methods.
}

你必须创建一个用户Serializer

public class UserSerializer implements JsonSerializer<User> {

    @Override
    public JsonElement serialize(User user, Type typeOfSrc, JsonSerializationContext context) {
        final JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("id", user.getId());
        jsonObject.addProperty("email", user.getEmail());
        jsonObject.addProperty("name", user.getName());
    }
}

最后,您必须将其注册为 TypeAdapter 到您的 Gson,并为 Realm 添加排除策略。

  new GsonBuilder()
        .setExclusionStrategies(new ExclusionStrategy() {
            @Override
            public boolean shouldSkipField(FieldAttributes f) {
                return f.getDeclaringClass().equals(RealmObject.class);
            }

            @Override
            public boolean shouldSkipClass(Class<?> clazz) {
                return false;
            }
        })
        .registerTypeAdapter(User.class, new UserSerializer())
        .create();

我想这会对你有所帮助。祝你好运。

【讨论】:

  • 您不再需要自定义类型适配器。只需使用 realm.copyFromRealm(obj) 将分离的副本发送到 GSON。
  • @ChristianMelchior 我想将基于 JSON 的数据解析为扩展 Realm 的对象。你能帮忙吗?我不想存储数据,我只想解析。
猜你喜欢
  • 2018-07-26
  • 2010-10-29
  • 2016-11-28
  • 1970-01-01
  • 2021-08-27
  • 2012-12-03
  • 1970-01-01
  • 2011-02-24
相关资源
最近更新 更多