deg*_*ill 9 serialization android json realm
我正在为我的应用程序实现一个数据库,我正在尝试将它"连接"到我的REST接口.数据以JSON形式出现,并且使用新的JSON-Support(从Realm 0.76开始)我可以将JSON抛给我Realm.createObjectFromJson(MyType.class, jsonString)
,它会创建适当的obejcts和RealmLists.
但我怎么能这样做呢?也就是说,使用RealmObject并将其序列化为JSON?它还应该序列化该对象内的任何RealmList.
Epi*_*rce 11
简而言之,您需要做的就是:
Gson gson = //... obtain your Gson
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);
}
Run Code Online (Sandbox Code Playgroud)
要将JSON反序列化为RealmObject,请使用以下内容
说你有这样的课程定义
@RealmClass
public class Foo extends RealmObject{
private String name;
public void setName(String name){ this.name = name}
public String getName(){ return this.name}
}
Run Code Online (Sandbox Code Playgroud)
和像这样的json有效负载:
String json = "{\"name\":\"bar\"}";
Foo fooObject= realm.createObjectFromJson(Foo.class, json);
//or
String jsonArray = "[{\"name\":\"bar\"},{\"name\":\"baz\"}]";
RealmList<Foo> fooObjects = realm.createAllFromJson(Foo.class, jsonArray);
Run Code Online (Sandbox Code Playgroud)
然而,在领域核心中本身不支持反向.所以这就是我如何解决它.我试图使用GSON,但最终编写了太多我自己不理解的代码,所以我实现了我自己的适配器.问题是RealmObjects不是'领域' java.lang.Object
.
创建一个适配器,它接受你的领域对象的实例并返回它的JSON表示.
例.
public class RealmJsonAdapter{
public JSONObject toJson(Foo foo){
JSONObject obj = new JSONObject();
obj.putString("name",foo.getName());
//if you have more fields you continue
return obj;
}
}
Run Code Online (Sandbox Code Playgroud)
您现在可以使用该适配器在你的类序列化RealmObject
到
JSON.最好你会使适配器成为一个接口,这样你就可以让调用者(可能是你自己)通过你想要使用的适配器.你可以打电话说,adapter.toJSON(realmObjectInstance)
.在你只关心JSON而不是RealmObject之后获得你的JSONObject实现.
注意 这个解决方案有点啰嗦.RealmObjects现在是真正的java对象,所以你应该可以在没有问题的情况下将它与GSON一起使用.只需确保您使用的是0.89或更高版本,一切都会正常工作.
来自Realm的基督徒。尽管核心数据库实际上支持JSON序列化,但Android Realm目前没有任何此类方法,因此,现在您必须手动执行此操作,或使用GSON之类的第三方工具(注意,我尚未测试该方案然而)。
归档时间: |
|
查看次数: |
16627 次 |
最近记录: |