diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java index f757513a..9dbbd3a7 100644 --- a/gson/src/main/java/com/google/gson/Gson.java +++ b/gson/src/main/java/com/google/gson/Gson.java @@ -195,6 +195,9 @@ public final class Gson { factories.add(TypeAdapters.JSON_ELEMENT_FACTORY); factories.add(ObjectTypeAdapter.FACTORY); + // the excluder must precede all adapters that handle user-defined types + factories.add(excluder); + // user's type adapters factories.addAll(typeAdapterFactories); @@ -231,9 +234,6 @@ public final class Gson { factories.add(TypeAdapters.ENUM_FACTORY); factories.add(TypeAdapters.CLASS_FACTORY); - // the excluder must precede all adapters that handle user-defined types - factories.add(excluder); - // type adapters for composite and user-defined types factories.add(new CollectionTypeAdapterFactory(constructorConstructor)); factories.add(new MapTypeAdapterFactory(constructorConstructor, complexMapKeySerialization)); @@ -888,11 +888,11 @@ public final class Gson { @Override public String toString() { - StringBuilder sb = new StringBuilder("{") - .append("serializeNulls:").append(serializeNulls) + return new StringBuilder("{serializeNulls:") + .append(serializeNulls) .append("factories:").append(factories) .append(",instanceCreators:").append(constructorConstructor) - .append("}"); - return sb.toString(); + .append("}") + .toString(); } } diff --git a/gson/src/test/java/com/google/gson/functional/ObjectTest.java b/gson/src/test/java/com/google/gson/functional/ObjectTest.java index ae00ca52..89d9f5ed 100644 --- a/gson/src/test/java/com/google/gson/functional/ObjectTest.java +++ b/gson/src/test/java/com/google/gson/functional/ObjectTest.java @@ -19,8 +19,12 @@ package com.google.gson.functional; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.InstanceCreator; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.google.gson.common.TestTypes; import com.google.gson.common.TestTypes.ArrayOfObjects; import com.google.gson.common.TestTypes.BagOfPrimitiveWrappers; import com.google.gson.common.TestTypes.BagOfPrimitives; @@ -284,6 +288,21 @@ public class ObjectTest extends TestCase { })); } + public void testAnonymousLocalClassesCustomSerialization() throws Exception { + gson = new GsonBuilder() + .registerTypeHierarchyAdapter(ClassWithNoFields.class, + new JsonSerializer() { + public JsonElement serialize( + ClassWithNoFields src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonObject(); + } + }).create(); + + assertEquals("null", gson.toJson(new ClassWithNoFields() { + // empty anonymous class + })); + } + public void testPrimitiveArrayFieldSerialization() { PrimitiveArray target = new PrimitiveArray(new long[] { 1L, 2L, 3L }); assertEquals(target.getExpectedJson(), gson.toJson(target));