Skip to content

Commit 90160f5

Browse files
committed
add demo of type decoder
1 parent 5bc0566 commit 90160f5

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

src/test/java/com/jsoniter/TestSpiTypeDecoder.java

+34
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.jsoniter;
22

33
import com.jsoniter.spi.Decoder;
4+
import com.jsoniter.spi.JsonException;
45
import com.jsoniter.spi.JsoniterSpi;
56
import com.jsoniter.spi.TypeLiteral;
67
import junit.framework.TestCase;
78

89
import java.io.IOException;
10+
import java.util.ArrayList;
911
import java.util.Arrays;
1012
import java.util.Date;
1113
import java.util.List;
@@ -88,4 +90,36 @@ public void test_as_array_element() throws IOException {
8890
MyDate[] dates = iter.read(MyDate[].class);
8991
assertEquals(1481365190000L, dates[0].date.getTime());
9092
}
93+
94+
public static class MyList {
95+
public List<String> list;
96+
}
97+
98+
public void test_list_or_single_element() {
99+
final TypeLiteral<List<String>> listOfString = new TypeLiteral<List<String>>() {
100+
};
101+
JsoniterSpi.registerTypeDecoder(MyList.class, new Decoder() {
102+
@Override
103+
public Object decode(JsonIterator iter) throws IOException {
104+
ValueType valueType = iter.whatIsNext();
105+
MyList myList = new MyList();
106+
switch (valueType) {
107+
case ARRAY:
108+
myList.list = iter.read(listOfString);
109+
return myList;
110+
case STRING:
111+
myList.list = new ArrayList<String>();
112+
myList.list.add(iter.readString());
113+
return myList;
114+
default:
115+
throw new JsonException("unexpected input");
116+
}
117+
}
118+
});
119+
MyList list1 = JsonIterator.deserialize("\"hello\"", MyList.class);
120+
assertEquals("hello", list1.list.get(0));
121+
MyList list2 = JsonIterator.deserialize("[\"hello\",\"world\"]", MyList.class);
122+
assertEquals("hello", list2.list.get(0));
123+
assertEquals("world", list2.list.get(1));
124+
}
91125
}

0 commit comments

Comments
 (0)