я не знаю, если это предназначено поведение или не Gson с использованием по умолчанию TypeAdapter.BOOLEAN
, но не только не true
и false
(и струнных "true"
и "false"
) получить десериализации как действительные булевых значений, но так делают TRUE
и FALSE
(и их версии String), True
и False
(и их версии String) и TrUe
и fAlSe
(и их версии String), а также любые искажения корпуса, которые вы хотели бы попробовать. Кроме того, поскольку TypeAdapter
полагается на Java Boolean.parseBoolean()
, любая ненулевая строка, которая не является некорректной обработкой "true"
, становится false
.В Gson, как вы можете ограничить логическое значение true и false (а не TrUe и fAlSe)?
Я пишу TypeAdapter
, и я хотел бы, чтобы только true
и false
быть приемлемыми булевы значения, но я не могу понять, как сказать, если значение, которое я собираюсь прочитать это true
или True
или TRUE
или tRuE
, так как я могу позвонить только nextBoolean()
, и он вернет одинаковое значение для всех этих.
Есть ли способ получить исходное значение, чтобы я мог проверить, действительно ли это форма нижнего регистра или мне не повезло?
Почему вы называете 'nextBoolean()', если следующий объект является строка ? Вы не можете получить строку и сделать логику? – lubilis
По умолчанию 'TypeAdapter.BOOLEAN' принимает либо голые, некотируемые значения, либо строку (видимо, для обратной совместимости). Если я не буду приводить значение и помещать 'true' или' TRUE' или 'True' или' tRuE', 'JsonReader.peek()' возвращает 'JsonToken.BOOLEAN', и я могу только вызвать' nextBoolean() 'для получить значение. Попытка вызвать 'nextString()' выдает исключение. Другими словами, я не могу понять, как не допускать странные булевы. – TOB
Конечно, я могу написать собственный 'TypeAdapter' для Booleans. Я должен реализовать 'public Boolean read (JsonReader in)'.Моя проблема заключается в том, что 'JsonReader' не предоставляет публичного способа рассказать разницу между токенами' true' и 'TRUE', и поскольку это единственное, к чему у меня есть доступ, когда я пишу' TypeAdapter', я не могу сказать разницы между ними. – TOB