2017-05-31 62 views
1

我從JSON響應中生成了來自Schema的POJO,編譯並加載了從POJO生成的類,但是在反序列化JSON響應時我沒有可以反序列化的實際類。反序列化JSON到動態加載的類文件

MyClassLoader classLoader = new MyClassLoader(POJOGeneratorForJSON.class.getClassLoader()); 

Class parentJsonClass = classLoader.loadClass(topLevelclassName, classpathLoc); 

ObjectMapper mapper = new ObjectMapper(); 

byte[] jsonBytes = generator.getBytesFromURL(source); 

if(jsonBytes != null){ 

    Object jsonObj = parentJsonClass.newInstance(); 
    jsonObj = mapper.readValue(jsonBytes, Class.class); 
} 

例外,我得到的是:「com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.Class out of START_OBJECT token

我知道,在我mapper.readValue()需要提供實際的類作爲第二個參數,但不知道怎麼辦。有人可以幫我解決問題嗎?

回答

1

readValue的第二個參數上,您需要傳遞一個Class實例來定義要讀取的對象的類型。看來你正在通過Class本身的類型。而傑克遜不能從jsonBytes反序列化Class對象。像這樣的東西應該工作:

Object jsonObj = mapper.readValue(jsonBytes, parentJsonClass); 

即從jsonBytes

+0

非常感謝馬諾斯....奏效閱讀parentJsonClass類型的對象! .... 我的錯。但我最後的需要是調用ParentJsonClass中的方法(我們的對象是parentJsonClass),但它的Type Class而不是ParentJsonClass。你能幫忙嗎? – Garry

+0

您可以使用'Class parentJsonClass'將一個'Object jsonObj'轉換爲該類型。所以如果有一個方法'foo()'說'parentJsonClass.cast(jsonObj).foo();' –

+0

使用上面的方法,我只能看到Object級別的方法,而不是ParentJsonClass類中的方法。我的問題是,我甚至不知道那裏的課上的方法。 – Garry