Fixed issue 100 by adding support for deserialization of collections of elements that do not implement Comparable.
This commit is contained in:
parent
3d1f7251c1
commit
a595032a90
@ -31,6 +31,7 @@ import java.util.Calendar;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
@ -79,7 +80,7 @@ final class DefaultTypeAdapters {
|
||||
private static final StringTypeAdapter STRING_TYPE_ADAPTER = new StringTypeAdapter();
|
||||
|
||||
private static final PropertiesCreator PROPERTIES_CREATOR = new PropertiesCreator();
|
||||
private static final TreeSetCreator TREE_SET_CREATOR = new TreeSetCreator();
|
||||
private static final HashSetCreator HASH_SET_CREATOR = new HashSetCreator();
|
||||
private static final GregorianCalendarTypeAdapter GREGORIAN_CALENDAR_TYPE_ADAPTER =
|
||||
new GregorianCalendarTypeAdapter();
|
||||
|
||||
@ -178,8 +179,8 @@ final class DefaultTypeAdapters {
|
||||
map.register(List.class, COLLECTION_TYPE_ADAPTER);
|
||||
map.register(Queue.class, COLLECTION_TYPE_ADAPTER);
|
||||
|
||||
map.register(Set.class, TREE_SET_CREATOR);
|
||||
map.register(SortedSet.class, TREE_SET_CREATOR);
|
||||
map.register(Set.class, HASH_SET_CREATOR);
|
||||
map.register(SortedSet.class, HASH_SET_CREATOR);
|
||||
map.register(Properties.class, PROPERTIES_CREATOR);
|
||||
map.makeUnmodifiable();
|
||||
return map;
|
||||
@ -779,13 +780,13 @@ final class DefaultTypeAdapters {
|
||||
}
|
||||
}
|
||||
|
||||
private static class TreeSetCreator implements InstanceCreator<TreeSet<?>> {
|
||||
public TreeSet<?> createInstance(Type type) {
|
||||
return new TreeSet<Object>();
|
||||
private static class HashSetCreator implements InstanceCreator<HashSet<?>> {
|
||||
public HashSet<?> createInstance(Type type) {
|
||||
return new HashSet<Object>();
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
return TreeSetCreator.class.getSimpleName();
|
||||
return HashSetCreator.class.getSimpleName();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,12 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Functional tests for Json serialization and deserialization of collections.
|
||||
@ -315,4 +317,31 @@ public class CollectionTest extends TestCase {
|
||||
return collection;
|
||||
}
|
||||
}
|
||||
|
||||
private static class Entry {
|
||||
int value;
|
||||
Entry() {
|
||||
this(10);
|
||||
}
|
||||
Entry(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
public void testSetSerialization() {
|
||||
Set<Entry> set = new HashSet<Entry>();
|
||||
set.add(new Entry(1));
|
||||
set.add(new Entry(2));
|
||||
String json = gson.toJson(set);
|
||||
assertTrue(json.contains("1"));
|
||||
assertTrue(json.contains("2"));
|
||||
}
|
||||
public void testSetDeserialization() {
|
||||
String json = "[{value:1},{value:2}]";
|
||||
Type type = new TypeToken<Set<Entry>>() {}.getType();
|
||||
Set<Entry> set = gson.fromJson(json, type);
|
||||
assertEquals(2, set.size());
|
||||
for (Entry entry : set) {
|
||||
assertTrue(entry.value == 1 || entry.value == 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user