diff --git a/gson/src/main/java/com/google/gson/JsonSerializationVisitor.java b/gson/src/main/java/com/google/gson/JsonSerializationVisitor.java index 104b8b42..e55bcc09 100644 --- a/gson/src/main/java/com/google/gson/JsonSerializationVisitor.java +++ b/gson/src/main/java/com/google/gson/JsonSerializationVisitor.java @@ -124,15 +124,10 @@ final class JsonSerializationVisitor implements ObjectNavigator.Visitor { } } else { Object fieldValue = getFieldValue(f, obj); - // See if the fieldValue has better type information than the specified typeOfF // This takes care of situations where the field was declared as an Object, but the // actual value contains something more specific. See Issue 54. - if (fieldValue != null && typeOfF instanceof Class) { - Class classOfF = (Class) typeOfF; - Class actualClassOfF = fieldValue.getClass(); - if (classOfF.isAssignableFrom(actualClassOfF)) { - typeOfF = actualClassOfF; - } + if (fieldValue != null && typeOfF == Object.class) { + typeOfF = fieldValue.getClass(); } addAsChildOfObject(f, typeOfF, fieldValue); } diff --git a/gson/src/test/java/com/google/gson/functional/CollectionTest.java b/gson/src/test/java/com/google/gson/functional/CollectionTest.java index 72ace47b..c3375c95 100644 --- a/gson/src/test/java/com/google/gson/functional/CollectionTest.java +++ b/gson/src/test/java/com/google/gson/functional/CollectionTest.java @@ -159,6 +159,14 @@ public class CollectionTest extends TestCase { assertEquals("[1,2,3,4,5,6,7,8,9]", gson.toJson(target)); } + @SuppressWarnings("unchecked") + public void testRawCollectionSerialization() { + BagOfPrimitives bag1 = new BagOfPrimitives(); + Collection target = Arrays.asList(bag1, bag1); + String json = gson.toJson(target); + assertTrue(json.contains(bag1.getExpectedJson())); + } + public void testRawCollectionDeserializationNotAlllowed() { String json = "[0,1,2,3,4,5,6,7,8,9]"; try {