-
-
Save jplazcano87/7f29a179f5ff719f2ee0cfd8fcf566bf to your computer and use it in GitHub Desktop.
Serialize Realm objects to JSON using GSON
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// GSON can parse the data. | |
// | |
// Deserialization: | |
// Note there is a bug in GSON 2.3.1 that can cause it to StackOverflow when working with RealmObjects. | |
// To work around this, use the ExclusionStrategy below or downgrade to 1.7.1 | |
// See more here: https://code.google.com/p/google-gson/issues/detail?id=440 | |
// | |
// Serialization: | |
// <Type>RealmProxy objects are created by the Realm annotation processor. They are used to control | |
// access to the actual data instead of storing them in fields and it is therefore them we need to register a | |
// TypeAdapter for. | |
Gson gson = 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(Class.forName("io.realm.PersonRealmProxy"), new PersonSerializer()) | |
.registerTypeAdapter(Class.forName("io.realm.DogRealmProxy"), new DogSerializer()) | |
.create(); | |
// Serialize a Realm object to a JSON string | |
String json = gson.toJson(realm.where(Person.class).findFirst()); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package io.realm.example; | |
import io.realm.RealmObject; | |
public class Dog extends RealmObject { | |
private String name; | |
public String getName() { | |
return name; | |
} | |
public void setName(String name) { | |
this.name = name; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package io.realm.examples; | |
import com.google.gson.JsonElement; | |
import com.google.gson.JsonObject; | |
import com.google.gson.JsonSerializationContext; | |
import com.google.gson.JsonSerializer; | |
import java.lang.reflect.Type; | |
import io.realm.examples.realmgridview.Dog; | |
public class DogSerializer implements JsonSerializer<Dog> { | |
@Override | |
public JsonElement serialize(Dog src, Type typeOfSrc, JsonSerializationContext context) { | |
final JsonObject jsonObject = new JsonObject(); | |
jsonObject.addProperty("name", src.getName()); | |
return jsonObject; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package io.realm.example; | |
import io.realm.RealmList; | |
import io.realm.RealmObject; | |
public class Person extends RealmObject { | |
private String name; | |
private int age; | |
private Dog favoriteDog; | |
private RealmList<Dog> dogs; | |
public String getName() { | |
return name; | |
} | |
public void setName(String name) { | |
this.name = name; | |
} | |
public int getAge() { | |
return age; | |
} | |
public void setAge(int age) { | |
this.age = age; | |
} | |
public Dog getFavoriteDog() { | |
return favoriteDog; | |
} | |
public void setFavoriteDog(Dog favoriteDog) { | |
this.favoriteDog = favoriteDog; | |
} | |
public RealmList<Dog> getDogs() { | |
return dogs; | |
} | |
public void setDogs(RealmList<Dog> dogs) { | |
this.dogs = dogs; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package io.realm.example; | |
import com.google.gson.JsonElement; | |
import com.google.gson.JsonObject; | |
import com.google.gson.JsonSerializationContext; | |
import com.google.gson.JsonSerializer; | |
import java.lang.reflect.Type; | |
public class PersonSerializer implements JsonSerializer<Person> { | |
@Override | |
public JsonElement serialize(Person src, Type typeOfSrc, JsonSerializationContext context) { | |
final JsonObject jsonObject = new JsonObject(); | |
jsonObject.addProperty("name", src.getName()); | |
jsonObject.addProperty("age", src.getAge()); | |
jsonObject.add("favoriteDog", context.serialize(src.getFavoriteDog())); | |
jsonObject.add("dogs", context.serialize(src.getDogs())); | |
return jsonObject; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment