我不知道这是在GSON使用默认TypeAdapter.BOOLEAN
预期的行为与否,而不是只做true
和false
(以及弦乐"true"
和"false"
)反序列化时是有效的布尔值,但这样做TRUE
和FALSE
(和他们的字符串版本),True
和False
(及其字符串版本)和TrUe
和fAlSe
(及其字符串版本),以及任何想要尝试的案例。另外,因为TypeAdapter
依赖于Java的Boolean.parseBoolean()
,所以非空字符串"true"
变成false
。在Gson中,如何将布尔值限制为true和false(而不是TrUe和fAlSe)?
我正在写一个TypeAdapter
,我想只允许true
和false
是可以接受的布尔值,但我无法弄清楚如何判断价值,我要读的是true
或True
或TRUE
或tRuE
,因为我只能拨打nextBoolean()
,它会为所有这些返回相同的值。
是否有任何方法获取原始值,以便我可以检查它是否是有效的小写格式或我是否运气不好?
为什么你叫一些变化'nextBoolean()'如果下一个对象是String ?你不能得到字符串,并制定逻辑? – lubilis
默认的'TypeAdapter.BOOLEAN'接受一个裸的,不加引号的值或一个String(显然是为了向后兼容)。如果我没有引用该值并且放入'true'或'TRUE'或'True'或'tRuE','JsonReader.peek()'返回'JsonToken.BOOLEAN',我只能调用'nextBoolean()'来获得价值。试图调用'nextString()'会引发异常。换句话说,我无法想出一个不接受奇怪装箱布尔人的方法。 – TOB
当然,我可以为布尔编写我自己的'TypeAdapter'。我必须实现'public Boolean read(JsonReader in)'。我的问题是'JsonReader'没有提供任何公开的方式来区分'true'和'TRUE'之间的区别,并且由于这是我在编写'TypeAdapter'时唯一可以访问的东西,所以我无法区分它们之间的区别它们之间。 – TOB