Fixed custom serilization invocation to correctly handle nulls returned by custom serializer.

This commit is contained in:
Inderjeet Singh 2009-10-09 15:28:05 +00:00
parent 6387c9028e
commit 60ef777efc
2 changed files with 22 additions and 3 deletions

View File

@ -184,7 +184,9 @@ final class JsonSerializationVisitor implements ObjectNavigator.Visitor {
objTypePair = pair.getSecond(); objTypePair = pair.getSecond();
start(objTypePair); start(objTypePair);
try { try {
return serializer.serialize(objTypePair.getObject(), objTypePair.getType(), context); JsonElement element =
serializer.serialize(objTypePair.getObject(), objTypePair.getType(), context);
return element == null ? JsonNull.createJsonNull() : element;
} finally { } finally {
end(objTypePair); end(objTypePair);
} }

View File

@ -16,11 +16,17 @@
package com.google.gson.functional; package com.google.gson.functional;
import java.lang.reflect.Type;
import junit.framework.TestCase;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.common.TestTypes.Base; import com.google.gson.common.TestTypes.Base;
import com.google.gson.common.TestTypes.BaseSerializer; import com.google.gson.common.TestTypes.BaseSerializer;
import com.google.gson.common.TestTypes.ClassWithBaseArrayField; import com.google.gson.common.TestTypes.ClassWithBaseArrayField;
@ -28,8 +34,6 @@ import com.google.gson.common.TestTypes.ClassWithBaseField;
import com.google.gson.common.TestTypes.Sub; import com.google.gson.common.TestTypes.Sub;
import com.google.gson.common.TestTypes.SubSerializer; import com.google.gson.common.TestTypes.SubSerializer;
import junit.framework.TestCase;
/** /**
* Functional Test exercising custom serialization only. When test applies to both * Functional Test exercising custom serialization only. When test applies to both
* serialization and deserialization then add it to CustomTypeAdapterTest. * serialization and deserialization then add it to CustomTypeAdapterTest.
@ -83,4 +87,17 @@ public class CustomSerializerTest extends TestCase {
JsonObject base = json.get("base").getAsJsonObject(); JsonObject base = json.get("base").getAsJsonObject();
assertEquals(BaseSerializer.NAME, base.get(Base.SERIALIZER_KEY).getAsString()); assertEquals(BaseSerializer.NAME, base.get(Base.SERIALIZER_KEY).getAsString());
} }
public void testSerializerReturnsNull() {
Gson gson = new GsonBuilder()
.registerTypeAdapter(Base.class, new JsonSerializer<Base>() {
public JsonElement serialize(Base src, Type typeOfSrc, JsonSerializationContext context) {
return null;
}
})
.create();
JsonElement json = gson.toJsonTree(new Base());
System.out.println(json);
assertTrue(json.isJsonNull());
}
} }