我一直在寻找答案的东西,但我迄今没有很多运气。杰克逊反序列化与匿名类
我的问题很简单:如何正确使用Jackson反序列化匿名对象。
private interface Interface1
{
int getValue();
}
public static void testAnonymousObject() throws IOException
{
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
Interface1 testObject = new Interface1()
{
private final int value = 5;
@Override
public int getValue()
{
return value;
}
};
String json = mapper.writeValueAsString(testObject);
System.out.println("JSON = " + json);
Interface1 received = (Interface1) mapper.readValue(json, Object.class);
System.out.println(received);
}
的这个输出是:JSON = [ “com.foo.test.JacksonTest $ 1”,{ “值”:5}]之前我得到一个异常:在螺纹
异常“主“com.fasterxml.jackson.databind.JsonMappingException:无法将类com.foo.test.JacksonTest $ 1(类型为local/anonymous)反序列化为Bean。
编辑为了澄清,Jackson和XStream都能够序列化对象。但是只有XStream似乎能够将对象反序列化。所以这个场景可以工作。
内部类实例需要构造其外部类的实例。杰克逊会用什么?它将如何创建外部类实例?顶级类和静态嵌套类有什么问题? – 2015-02-09 20:23:09
这里被序列化/反序列化的对象只是一个空接口的匿名实现。 问题是我正在转换已经使用XStream序列化的大型代码库来使用Jackson。匿名对象在代码中相当常见。在这种情况下,XStream能够序列化和反序列化这个对象。杰克逊只能序列化,但不能反序列化。 – sydraz 2015-02-09 20:26:53