Added default serializer/deserializer for "Number"
This commit is contained in:
parent
788d2bfbbb
commit
628a2c5b86
@ -71,6 +71,7 @@ final class DefaultTypeAdapters {
|
|||||||
private static final FloatTypeAdapter FLOAT_TYPE_ADAPTER = new FloatTypeAdapter();
|
private static final FloatTypeAdapter FLOAT_TYPE_ADAPTER = new FloatTypeAdapter();
|
||||||
private static final IntegerTypeAdapter INTEGER_TYPE_ADAPTER = new IntegerTypeAdapter();
|
private static final IntegerTypeAdapter INTEGER_TYPE_ADAPTER = new IntegerTypeAdapter();
|
||||||
private static final LongTypeAdapter LONG_TYPE_ADAPTER = new LongTypeAdapter();
|
private static final LongTypeAdapter LONG_TYPE_ADAPTER = new LongTypeAdapter();
|
||||||
|
private static final NumberTypeAdapter NUMBER_TYPE_ADAPTER = new NumberTypeAdapter();
|
||||||
private static final ShortTypeAdapter SHORT_TYPE_ADAPTER = new ShortTypeAdapter();
|
private static final ShortTypeAdapter SHORT_TYPE_ADAPTER = new ShortTypeAdapter();
|
||||||
private static final StringTypeAdapter STRING_TYPE_ADAPTER = new StringTypeAdapter();
|
private static final StringTypeAdapter STRING_TYPE_ADAPTER = new StringTypeAdapter();
|
||||||
|
|
||||||
@ -116,6 +117,7 @@ final class DefaultTypeAdapters {
|
|||||||
map.register(int.class, INTEGER_TYPE_ADAPTER);
|
map.register(int.class, INTEGER_TYPE_ADAPTER);
|
||||||
map.register(Long.class, LONG_TYPE_ADAPTER);
|
map.register(Long.class, LONG_TYPE_ADAPTER);
|
||||||
map.register(long.class, LONG_TYPE_ADAPTER);
|
map.register(long.class, LONG_TYPE_ADAPTER);
|
||||||
|
map.register(Number.class, NUMBER_TYPE_ADAPTER);
|
||||||
map.register(Short.class, SHORT_TYPE_ADAPTER);
|
map.register(Short.class, SHORT_TYPE_ADAPTER);
|
||||||
map.register(short.class, SHORT_TYPE_ADAPTER);
|
map.register(short.class, SHORT_TYPE_ADAPTER);
|
||||||
map.register(String.class, STRING_TYPE_ADAPTER);
|
map.register(String.class, STRING_TYPE_ADAPTER);
|
||||||
@ -152,6 +154,7 @@ final class DefaultTypeAdapters {
|
|||||||
map.register(int.class, wrapDeserializer(INTEGER_TYPE_ADAPTER));
|
map.register(int.class, wrapDeserializer(INTEGER_TYPE_ADAPTER));
|
||||||
map.register(Long.class, wrapDeserializer(LONG_TYPE_ADAPTER));
|
map.register(Long.class, wrapDeserializer(LONG_TYPE_ADAPTER));
|
||||||
map.register(long.class, wrapDeserializer(LONG_TYPE_ADAPTER));
|
map.register(long.class, wrapDeserializer(LONG_TYPE_ADAPTER));
|
||||||
|
map.register(Number.class, wrapDeserializer(NUMBER_TYPE_ADAPTER));
|
||||||
map.register(Short.class, wrapDeserializer(SHORT_TYPE_ADAPTER));
|
map.register(Short.class, wrapDeserializer(SHORT_TYPE_ADAPTER));
|
||||||
map.register(short.class, wrapDeserializer(SHORT_TYPE_ADAPTER));
|
map.register(short.class, wrapDeserializer(SHORT_TYPE_ADAPTER));
|
||||||
map.register(String.class, wrapDeserializer(STRING_TYPE_ADAPTER));
|
map.register(String.class, wrapDeserializer(STRING_TYPE_ADAPTER));
|
||||||
@ -511,6 +514,23 @@ final class DefaultTypeAdapters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class NumberTypeAdapter
|
||||||
|
implements JsonSerializer<Number>, JsonDeserializer<Number> {
|
||||||
|
public JsonElement serialize(Number src, Type typeOfSrc, JsonSerializationContext context) {
|
||||||
|
return new JsonPrimitive(src);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Number deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
|
||||||
|
throws JsonParseException {
|
||||||
|
return json.getAsNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return LongTypeAdapter.class.getSimpleName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class LongTypeAdapter
|
private static class LongTypeAdapter
|
||||||
implements InstanceCreator<Long>, JsonSerializer<Long>, JsonDeserializer<Long> {
|
implements InstanceCreator<Long>, JsonSerializer<Long>, JsonDeserializer<Long> {
|
||||||
public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) {
|
public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) {
|
||||||
|
@ -143,6 +143,27 @@ public class PrimitiveTest extends TestCase {
|
|||||||
assertEquals(true, value);
|
assertEquals(true, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testNumberSerialization() {
|
||||||
|
Number expected = 1L;
|
||||||
|
String json = gson.toJson(expected);
|
||||||
|
assertEquals(expected.toString(), json);
|
||||||
|
|
||||||
|
json = gson.toJson(expected, Number.class);
|
||||||
|
assertEquals(expected.toString(), json);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testNumberDeserialization() {
|
||||||
|
String json = "1";
|
||||||
|
Number expected = new Integer(json);
|
||||||
|
Number actual = gson.fromJson(json, Number.class);
|
||||||
|
assertEquals(expected.intValue(), actual.intValue());
|
||||||
|
|
||||||
|
json = String.valueOf(Long.MAX_VALUE);
|
||||||
|
expected = new Long(json);
|
||||||
|
actual = gson.fromJson(json, Number.class);
|
||||||
|
assertEquals(expected.longValue(), actual.longValue());
|
||||||
|
}
|
||||||
|
|
||||||
public void testPrimitiveDoubleAutoboxedSerialization() {
|
public void testPrimitiveDoubleAutoboxedSerialization() {
|
||||||
assertEquals("-122.08234335", gson.toJson(-122.08234335));
|
assertEquals("-122.08234335", gson.toJson(-122.08234335));
|
||||||
assertEquals("122.08112002", gson.toJson(new Double(122.08112002)));
|
assertEquals("122.08112002", gson.toJson(new Double(122.08112002)));
|
||||||
|
Loading…
Reference in New Issue
Block a user