Есть ли способ указать тип класса значения карты в json-lib?
Нет.То же самое при десериализации до List<CustomType>
, даже если вы сказали ему, какой тип вы хотите с помощью вызова toBean
.
После вызова toBean
значения в коллекции будут DynaBeans
.Вы должны перебрать значения коллекции и преобразовать их в предпочтительные типы.Преобразование может быть выполнено вручную, поле за раз или более автоматическим способом с net.sf.ezmorph.Morpher
, зарегистрированным в MorpherRegistry
.
ВНИМАНИЕ: Даже при таком подходе вы должны быть осторожны скак вы ссылаетесь на значение перед его преобразованием в экземпляр целевого типа.Компилятор (и, следовательно, среда выполнения) считает, что значение имеет параметризованный тип (если используется обобщенный тип), и поэтому он с радостью попытается использовать его в качестве этого типа.Это, конечно, вызывает ClassCastException (даже если ваш код не выполняет явного приведения типов).Таким образом, при доступе к значениям просто получите их, объявив ссылку типа Object
и используя ее.Не пытайтесь использовать значения любым другим способом без явной ссылки на тип Object
.(Вы поймете, о чем я говорю, когда напишите код и увидите ошибки. Я сейчас слишком занят, чтобы кодировать пример.)