diff --git a/gson/src/main/java/com/google/gson/JsonPrimitive.java b/gson/src/main/java/com/google/gson/JsonPrimitive.java index e8b73708..a18ca799 100644 --- a/gson/src/main/java/com/google/gson/JsonPrimitive.java +++ b/gson/src/main/java/com/google/gson/JsonPrimitive.java @@ -166,7 +166,13 @@ public final class JsonPrimitive extends JsonElement { */ @Override public String getAsString() { - return (String) value; + if (isNumber()) { + return getAsNumber().toString(); + } else if (isBoolean()) { + return getAsBooleanWrapper().toString(); + } else { + return (String) value; + } } /** 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 cc2d142e..ce7aa072 100644 --- a/gson/src/test/java/com/google/gson/functional/ObjectTest.java +++ b/gson/src/test/java/com/google/gson/functional/ObjectTest.java @@ -542,4 +542,14 @@ public class ObjectTest extends TestCase { assertTrue(bag.booleanValue); assertEquals("bar", bag.stringValue); } + + public void testStringFieldWithNumberValueDeserialization() { + String json = "{\"stringValue\":1}"; + BagOfPrimitives bag = gson.fromJson(json, BagOfPrimitives.class); + assertEquals("1", bag.stringValue); + + json = "{\"stringValue\":true}"; + bag = gson.fromJson(json, BagOfPrimitives.class); + assertEquals("true", bag.stringValue); + } }