Serialize java object with GSON
gson, java, json
Solution
In order to get the result you desire, you need to write the serializer like this:
public static class PersonSerializer implements JsonSerializer<Person> {
public JsonElement serialize(final Person person, final Type type, final JsonSerializationContext context) {
JsonObject result = new JsonObject();
result.add("id", new JsonPrimitive(person.getId()));
result.add("name", new JsonPrimitive(person.getName()));
Person parent = person.getParent();
if (parent != null) {
result.add("parent", new JsonPrimitive(parent.getId()));
}
return result;
}
}
The result for
Person p = new Person(1, "Joe", new Person(2, "Mike"));
com.google.gson.Gson gson = new GsonBuilder().registerTypeAdapter(Person.class, new PersonSerializer())
.create();
System.out.println(gson.toJson(p));
will be
{"id":1,"name":"Joe","parent":2}
Complete code:
import java.lang.reflect.Type;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
public class GsonSimpleTest {
public static class Person {
public int id;
public String name;
public Person parent;
public Person(final int id, final String name) {
super();
this.id = id;
this.name = name;
}
public Person(final int id, final String name, final Person parent) {
super();
this.id = id;
this.name = name;
this.parent = parent;
}
public int getId() {
return id;
}
public void setId(final int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public Person getParent() {
return parent;
}
public void setParent(final Person parent) {
this.parent = parent;
}
}
public static class PersonSerializer implements JsonSerializer<Person> {
public JsonElement serialize(final Person person, final Type type, final JsonSerializationContext context) {
JsonObject result = new JsonObject();
result.add("id", new JsonPrimitive(person.getId()));
result.add("name", new JsonPrimitive(person.getName()));
Person parent = person.getParent();
if (parent != null) {
result.add("parent", new JsonPrimitive(parent.getId()));
}
return result;
}
}
public static void main(final String[] args) {
Person p = new Person(1, "Joe", new Person(2, "Mike"));
com.google.gson.Gson gson = new GsonBuilder().registerTypeAdapter(Person.class, new PersonSerializer())
.create();
System.out.println(gson.toJson(p));
}
}
Problem
I would like to serialize this object to JSON String ``` public class Person { public String id; public String name; public Person parent; } ``` and obtain a result like this: ``` {id: 1, name: "Joe", parent: 2} ``` I tried to use ``` Person p = new Person(1, "Joe", new Person(2, "Mike")); Gson gson = new GsonBuilder() .registerTypeAdapter(Persona.class, new PersonSerializer()).create(); String str = gson.toJson(p); ``` but instead of that, I got: ``` "1" ``` PersonSerializer: ``` public class PersonSerializer implements JsonSerializer<Person> { public JsonElement serialize(Person src, Type typeOfSrc, ...) { return new JsonPrimitive(src.id); } } ``` Please any suggestion is welcome Thanks, Mario