使用异构的String和Integers列表为GSON定义类

时间:2016-07-31 15:51:00

标签: java json gson

我想使用GSON将对象转换为json字符串。 json string是

 "type": "both", "value": ["numbercodes", [1, 2, 3]] 

正如你所看到的那样"价值"是String的列表,后跟整数数组,所以如何表示字符串和数字的异质性列表

以下代码无法工作:

class X
{
    String type;
    List<List<String>> value;
}

或者即使以下代码也无效:

class Value
{
    String x1;
    List<Integer> x2;
}
class X 
{
    String type;
    Value value;
}

Gson gson = new Gson();
X x = new X();
String jsonString = gson.toString(x);

但是jsonString的值不会像预期的那样。

&#34;输入&#34;:&#34;两者&#34;,&#34;值&#34;:[&#34;数字代码&#34;,[1,2,3]]

那我该如何定义我的课程&#34; X&#34;这样我就得到了json字符串。

1 个答案:

答案 0 :(得分:1)

最好的解决方案是重构数据模型。始终将代码清晰地写给其他开发人员,以便他们能够理解模型所代表的内容。它应该像下面的例子:

{
    "type": "both",
    "someKey": "numbercodes",
    "arrayOfIntegers": [1, 2, 3]
}

然后你的实体类就是:

class Entity {
    String type;
    String someKey;
    List<Integer> arrayOfIntegers;
}

当前模型并没有真正说出“数字编码”和整数数组。有很多方法可以改变它,我刚刚提出了一个。

修改

如果您真的想继续使用当前模型,那应该只是:

class Entity {
    String type;
    List<Object> value = new ArrayList<>();
    ...
    public void addValue(Object valueToAdd){
        value.add(valueToAdd);
    }
}

...

Entity entity = new Entity();
entity.setType("both");
entity.addValue("numbercodes");
entity.addValue(Arrays.asList(1,2,3));