Skip to content
This repository was archived by the owner on Feb 16, 2022. It is now read-only.

Commit e040900

Browse files
author
ParkJeongHwan
committed
Fixed collections, map type error.
1 parent 864a7b3 commit e040900

File tree

3 files changed

+51
-15
lines changed

3 files changed

+51
-15
lines changed

src/main/java/com/realtimetech/kson/KsonContext.java

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.lang.reflect.Array;
55
import java.lang.reflect.Field;
66
import java.util.ArrayList;
7+
import java.util.Collection;
78
import java.util.Date;
89
import java.util.HashMap;
910
import java.util.LinkedList;
@@ -76,14 +77,14 @@ public Object serialize(KsonContext ksonContext, Date value) {
7677
}
7778

7879
@Override
79-
public Date deserialize(KsonContext ksonContext, Object value) {
80+
public Date deserialize(KsonContext ksonContext, Class<?> fieldType, Object value) {
8081
return new Date((Long) value);
8182
}
8283
});
8384

84-
this.registeredTransformers.put(List.class, new Transformer<ArrayList<?>>() {
85+
this.registeredTransformers.put(Collection.class, new Transformer<Collection<?>>() {
8586
@Override
86-
public Object serialize(KsonContext ksonContext, ArrayList<?> value) {
87+
public Object serialize(KsonContext ksonContext, Collection<?> value) {
8788
KsonArray ksonArray = new KsonArray();
8889

8990
for (Object object : value) {
@@ -97,25 +98,32 @@ public Object serialize(KsonContext ksonContext, ArrayList<?> value) {
9798
return ksonArray;
9899
}
99100

101+
@SuppressWarnings("deprecation")
100102
@Override
101-
public ArrayList<?> deserialize(KsonContext ksonContext, Object value) {
102-
ArrayList<Object> list = new ArrayList<Object>();
103+
public Collection<?> deserialize(KsonContext ksonContext, Class<?> fieldType, Object value) {
104+
Collection<Object> collections = null;
105+
106+
try {
107+
collections = (Collection<Object>) fieldType.newInstance();
108+
} catch (Exception e) {
109+
e.printStackTrace();
110+
}
103111

104112
for (Object object : (KsonArray) value) {
105113
try {
106-
list.add(ksonContext.addToObjectStack(object.getClass(), object));
114+
collections.add(ksonContext.addToObjectStack(object.getClass(), object));
107115
} catch (Exception e) {
108116
e.printStackTrace();
109117
}
110118
}
111119

112-
return list;
120+
return collections;
113121
}
114122
});
115123

116-
this.registeredTransformers.put(Map.class, new Transformer<HashMap<?, ?>>() {
124+
this.registeredTransformers.put(Map.class, new Transformer<Map<?, ?>>() {
117125
@Override
118-
public Object serialize(KsonContext ksonContext, HashMap<?, ?> value) {
126+
public Object serialize(KsonContext ksonContext, Map<?, ?> value) {
119127
KsonObject ksonObject = new KsonObject();
120128

121129
for (Object keyObject : value.keySet()) {
@@ -133,22 +141,29 @@ public Object serialize(KsonContext ksonContext, HashMap<?, ?> value) {
133141
return ksonObject;
134142
}
135143

144+
@SuppressWarnings("deprecation")
136145
@Override
137-
public HashMap<?, ?> deserialize(KsonContext ksonContext, Object value) {
138-
HashMap<Object, Object> hashMap = new HashMap<Object, Object>();
146+
public Map<?, ?> deserialize(KsonContext ksonContext, Class<?> fieldType, Object value) {
147+
Map<Object, Object> map = null;
148+
149+
try {
150+
map = (Map<Object, Object>) fieldType.newInstance();
151+
} catch (Exception e) {
152+
e.printStackTrace();
153+
}
139154

140155
KsonObject ksonObject = (KsonObject) value;
141156
for (Object keyObject : ksonObject.keySet()) {
142157
Object valueObject = ksonObject.get(keyObject);
143158

144159
try {
145-
hashMap.put(ksonContext.addToObjectStack(keyObject.getClass(), keyObject), ksonContext.addToObjectStack(valueObject.getClass(), valueObject));
160+
map.put(ksonContext.addToObjectStack(keyObject.getClass(), keyObject), ksonContext.addToObjectStack(valueObject.getClass(), valueObject));
146161
} catch (Exception e) {
147162
e.printStackTrace();
148163
}
149164
}
150165

151-
return hashMap;
166+
return map;
152167
}
153168
});
154169

@@ -270,6 +285,7 @@ public Object addToObjectStack(Class<?> clazz, Object object) throws Deserialize
270285
try {
271286
field.set(targetObject, createAtToObject(false, field.getType(), ksonValue.get(field.getName())));
272287
} catch (IllegalArgumentException | IllegalAccessException e) {
288+
e.printStackTrace();
273289
throw new DeserializeException("Deserialize failed because can't access the field.");
274290
}
275291
}
@@ -324,8 +340,10 @@ private Object createAtToObject(boolean first, Class<?> type, Object originalVal
324340
Transformer<Object> transformer = (Transformer<Object>) this.getTransformer(type);
325341

326342
if (transformer != null) {
343+
Class<?> realType = type;
344+
327345
type = originalValue.getClass();
328-
originalValue = transformer.deserialize(this, originalValue);
346+
originalValue = transformer.deserialize(this, realType, originalValue);
329347
}
330348
}
331349

src/main/java/com/realtimetech/kson/test/TestObject.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.ArrayList;
66
import java.util.Date;
77
import java.util.HashMap;
8+
import java.util.LinkedList;
89
import java.util.List;
910
import java.util.Map;
1011

@@ -46,6 +47,9 @@ public class TestObject {
4647
private ArrayList<Date> dateArrayList;
4748
private List<Date> dateList;
4849

50+
private LinkedList<Double> doubleLinkedList;
51+
private List<Double> doubleList;
52+
4953
private HashMap<String, String> stringMap;
5054
private HashMap<String, Date> dateMap;
5155
private HashMap<HashMap<String, String>, HashMap<String, String>> mapMap;
@@ -233,6 +237,20 @@ public TestObject(Test test) {
233237
this.dateMap.put("B", new Date());
234238
}
235239

240+
this.doubleLinkedList = new LinkedList<Double>();
241+
{
242+
this.doubleLinkedList.add(0d);
243+
this.doubleLinkedList.add(1d);
244+
this.doubleLinkedList.add(2d);
245+
}
246+
247+
this.doubleList = new LinkedList<Double>();
248+
{
249+
this.doubleList.add(0d);
250+
this.doubleList.add(1d);
251+
this.doubleList.add(2d);
252+
}
253+
236254
this.mapMap = new HashMap<HashMap<String, String>, HashMap<String, String>>();
237255
{
238256
{

src/main/java/com/realtimetech/kson/transform/Transformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
public interface Transformer<T> {
66
public Object serialize(KsonContext ksonContext, T value);
77

8-
public T deserialize(KsonContext ksonContext, Object value);
8+
public T deserialize(KsonContext ksonContext, Class<?> object, Object value);
99
}

0 commit comments

Comments
 (0)