|
1 | 1 | package com.jsoniter;
|
2 | 2 |
|
3 | 3 | import com.jsoniter.spi.Decoder;
|
| 4 | +import com.jsoniter.spi.JsonException; |
4 | 5 | import com.jsoniter.spi.JsoniterSpi;
|
5 | 6 | import com.jsoniter.spi.TypeLiteral;
|
6 | 7 | import junit.framework.TestCase;
|
7 | 8 |
|
8 | 9 | import java.io.IOException;
|
| 10 | +import java.util.ArrayList; |
9 | 11 | import java.util.Arrays;
|
10 | 12 | import java.util.Date;
|
11 | 13 | import java.util.List;
|
@@ -88,4 +90,36 @@ public void test_as_array_element() throws IOException {
|
88 | 90 | MyDate[] dates = iter.read(MyDate[].class);
|
89 | 91 | assertEquals(1481365190000L, dates[0].date.getTime());
|
90 | 92 | }
|
| 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 | + } |
91 | 125 | }
|
0 commit comments