What steps will reproduce the problem?
1.Create a deserializer for an interface class and register it
2.Serialization of the interface no longer occurs.
What is the expected output? What do you see instead?
I expected to see the class serialized like it was before the deserializer was
registered.
What version of the product are you using? On what operating system?
Using GSON version 2.1, on Windows 7 x64, using Oracle Java (32 bit) 7 update 3
Please provide any additional information below.
Here is a small example that will illustrate the issue (written as a JUnit
test).
public interface HelloInterface {
public String sayHello();
}
public class HelloClass implements HelloInterface{
private String hi = "hi";
public String sayHello(){
return hi;
}
}
public class Greeter {
private HelloInterface saysHello;
public void setHello(HelloInterface hello){
saysHello = hello;
}
}
public void testGsonSerialization(){
GsonBuilder builder = new GsonBuilder();
Greeter greeter = new Greeter();
final String expectedCorrect = "{\"saysHello\":{\"hi\":\"hi\"}}";
final String incorrectJson = "{\"saysHello\":{}}";
// Should be able to serialize, but not deserialize.
greeter.setHello(new HelloClass());
String jsonResult = builder.create().toJson(greeter);
assertEquals(expectedCorrect, jsonResult);
builder.registerTypeAdapter(HelloInterface.class, new JsonDeserializer<HelloInterface>() {
@Override
public HelloInterface deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
// Do stuff, it doesn't even matter here.
return null;
}
});
//Registering a deserializer causes the serialization to not work anymore.
String secondJsonResult = builder.create().toJson(greeter);
// This line passes.
assertEquals(incorrectJson, secondJsonResult);
// This line fails
assertEquals(expectedCorrect, secondJsonResult);
}
Original issue reported on code.google.com by mdkitz...@gmail.com on 9 Oct 2012 at 9:02
Original issue reported on code.google.com by
mdkitz...@gmail.com
on 9 Oct 2012 at 9:02