I think the problem here is that you have your adapter read method in the wrong order. Can you confirm if the following fixes it?
CartHive read(BinaryReader reader) {
return CartHive(
(reader.readMap()).cast<String, int>(), // this should be the second arg
(reader.readMap()).cast<String, String>(), // this should be the first arg
(reader.readMap()).cast<String, int>(),
);