我一直在尋找答案的東西,但我迄今沒有很多運氣。傑克遜反序列化與匿名類
我的問題很簡單:如何正確使用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