我对Google的AutoBean序列化和反序列化有一些问题。 我有一个包含基本类型和地图的AutoBean。我可以毫无问题地序列化和反序列化原始类型,但是当我尝试读取反序列化的Map时,我得到NullPointerException。 你以前遇到过类似的问题吗?有一个JUnit测试代表我的问题。前两个断言是通过,但第三个断言失败。
public class AutoBeanTest {
@Test
public void test() throws Exception {
MyFactory myFactory = AutoBeanFactorySource.create(MyFactory.class);
Options options = myFactory.options().as();
options.setMyInt(5);
HashMap<Double, Boolean> map = newHashMap();
map.put(8.0, true);
map.put(9.1, false);
options.setMyMap(map);
Options deserialized = AutoBeanCodex.decode(myFactory, Options.class, AutoBeanCodex.encode(AutoBeanUtils.getAutoBean(options)).getPayload()).as();
assertEquals(deserialized.getMyInt(),5);
assertTrue(options.getMyMap().containsKey(8d));
assertTrue(deserialized.getMyMap().containsKey(8d));
}
public interface MyFactory extends AutoBeanFactory {
AutoBean<Options> options();
}
public interface Options {
public int getMyInt();
void setMyInt(int myInt);
Map<Double, Boolean> getMyMap();
void setMyMap(Map<Double, Boolean> myMap);
}
}
答案 0 :(得分:2)
我前段时间一直在使用AutoBean功能。我认为这仍然是一种马车。我很确定异常是由AutoBean代码中的错误引起的,而不是代码中的错误。
如果您在调试器中运行上面的示例代码并检查生成的JSON,那么事情看起来很好。您甚至可以致电deserialized.getMyMap().size()
并获取正确的值,但一旦您想要访问内容,就会出现错误。
有一种解决方法,只需使用Map<String, String>
代替Double
或Boolean
,它就有效......
答案 1 :(得分:1)
Ackchyually ... Autobeans正确地完成了in JSON only strings are allowed as keys的工作。但是,当然,错误消息应该会更有帮助。