类中的Gson变量可以是String或List <integer> </integer>

时间:2014-09-22 13:47:33

标签: java gson

将gson用于类时,其中一个类变量可以是String或List。有没有可能捕获并修复它而不创建一个全新的类,其中一个类具有String和另一个List?

以下是该类的示例:

public class JsonClass
{
    private List<Integer> range;

    public List<Integer> getRange() { return range; }
}

仅当范围是带有整数的List时才有效,但它也可以只是一个String。 gson消息是:&#34;预期STRING但是BEGIN_ARRAY&#34;。

2 个答案:

答案 0 :(得分:0)

我不认为你能做到这一点。字符串和列表是完全不同的东西。由于Java是强类型的,你应该创建一个新类,以便能够用2种方式处理它

答案 1 :(得分:0)

你有两个问题。

首先,如果代码不知道JsonClass的类型,您的代码将如何使用此range。您可以将其声明为Object,但是您必须每次检查实例类型并进行转换。或者,您可以有两个变量,每种变量一个。但那么,你对另一个做什么?你离开它null了吗?你把一个默认值,空列表,空字符串?这些是你应该首先考虑的事情。

其次,默认情况下,Gson会查看字段的声明类型以反序列化JSON。如果您将其声明为Object,它将使用一些已知的默认值。你可以做的是创建并注册一个TypeAdapter,它将包含用于根据它找到的内容反序列化JSON数组和JSON字符串的逻辑。

我不推荐上述任何一种方法。我建议您尝试修复您收到的JSON以发送单一类型或根据一些外部信息将其映射到不同类型,即。不是基于JSON本身。