将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;。
答案 0 :(得分:0)
我不认为你能做到这一点。字符串和列表是完全不同的东西。由于Java是强类型的,你应该创建一个新类,以便能够用2种方式处理它
答案 1 :(得分:0)
你有两个问题。
首先,如果代码不知道JsonClass
的类型,您的代码将如何使用此range
。您可以将其声明为Object
,但是您必须每次检查实例类型并进行转换。或者,您可以有两个变量,每种变量一个。但那么,你对另一个做什么?你离开它null
了吗?你把一个默认值,空列表,空字符串?这些是你应该首先考虑的事情。
其次,默认情况下,Gson会查看字段的声明类型以反序列化JSON。如果您将其声明为Object
,它将使用一些已知的默认值。你可以做的是创建并注册一个TypeAdapter
,它将包含用于根据它找到的内容反序列化JSON数组和JSON字符串的逻辑。
我不推荐上述任何一种方法。我建议您尝试修复您收到的JSON以发送单一类型或根据一些外部信息将其映射到不同类型,即。不是基于JSON本身。