Converted CharacterTypeAdapter to the new style.

This commit is contained in:
Inderjeet Singh 2011-09-16 05:58:41 +00:00
parent 882c14a367
commit b5f8ef6e16
3 changed files with 19 additions and 24 deletions

View File

@ -47,7 +47,6 @@ final class DefaultTypeAdapters {
private static final DefaultTimestampDeserializer TIMESTAMP_DESERIALIZER =
new DefaultTimestampDeserializer();
private static final CharacterTypeAdapter CHARACTER_TYPE_ADAPTER = new CharacterTypeAdapter();
private static final NumberTypeAdapter NUMBER_TYPE_ADAPTER = new NumberTypeAdapter();
private static final GregorianCalendarTypeAdapter GREGORIAN_CALENDAR_TYPE_ADAPTER =
@ -74,9 +73,6 @@ final class DefaultTypeAdapters {
map.register(Calendar.class, GREGORIAN_CALENDAR_TYPE_ADAPTER, true);
map.register(GregorianCalendar.class, GREGORIAN_CALENDAR_TYPE_ADAPTER, true);
// Add primitive serializers
map.register(char.class, CHARACTER_TYPE_ADAPTER, true);
map.register(Character.class, CHARACTER_TYPE_ADAPTER, true);
map.register(Number.class, NUMBER_TYPE_ADAPTER, true);
map.makeUnmodifiable();
@ -93,9 +89,6 @@ final class DefaultTypeAdapters {
map.register(Calendar.class, GREGORIAN_CALENDAR_TYPE_ADAPTER, true);
map.register(GregorianCalendar.class, GREGORIAN_CALENDAR_TYPE_ADAPTER, true);
// Add primitive deserializers
map.register(char.class, wrapDeserializer(CHARACTER_TYPE_ADAPTER), true);
map.register(Character.class, wrapDeserializer(CHARACTER_TYPE_ADAPTER), true);
map.register(Number.class, NUMBER_TYPE_ADAPTER, true);
map.makeUnmodifiable();
@ -331,21 +324,4 @@ final class DefaultTypeAdapters {
return NumberTypeAdapter.class.getSimpleName();
}
}
private static final class CharacterTypeAdapter
implements JsonSerializer<Character>, JsonDeserializer<Character> {
public JsonElement serialize(Character src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
public Character deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
return json.getAsCharacter();
}
@Override
public String toString() {
return CharacterTypeAdapter.class.getSimpleName();
}
}
}

View File

@ -236,6 +236,7 @@ public final class Gson {
floatAdapter(serializeSpecialFloatingPointValues)))
.factory(new ExcludedTypeAdapterFactory(
serializationExclusionStrategy, deserializationExclusionStrategy))
.factory(TypeAdapters.CHARACTER_FACTORY)
.factory(TypeAdapters.STRING_FACTORY)
.factory(TypeAdapters.STRING_BUILDER_FACTORY)
.factory(TypeAdapters.STRING_BUFFER_FACTORY)

View File

@ -231,6 +231,24 @@ public final class TypeAdapters {
public static final TypeAdapter.Factory DOUBLE_FACTORY
= newFactory(double.class, Double.class, DOUBLE);
public static final TypeAdapter<Character> CHARACTER = new TypeAdapter<Character>() {
@Override
public Character read(JsonReader reader) throws IOException {
if (reader.peek() == JsonToken.NULL) {
reader.nextNull(); // TODO: does this belong here?
return null;
}
return reader.nextString().charAt(0);
}
@Override
public void write(JsonWriter writer, Character value) throws IOException {
writer.value(String.valueOf(value));
}
};
public static final TypeAdapter.Factory CHARACTER_FACTORY
= newFactory(char.class, Character.class, CHARACTER);
public static final TypeAdapter<String> STRING = new TypeAdapter<String>() {
@Override
public String read(JsonReader reader) throws IOException {