2010-07-01 85 views
5

我不能propperly明白我的错误,当我运行此代码:无法反序列化java.lang.Class的实例进行START_OBJECT令牌

InputStream is = this.getClass().getClassLoader().getResourceAsStream(filename); 
String jsonTxt = IOUtils.toString(is); 
JSONArray json = (JSONArray) JSONSerializer.toJSON(jsonTxt); 
JSONObject metadatacontent = json.getJSONObject(0); 
ObjectMapper mapper = new ObjectMapper(); 
mapper.readValue(metadatacontent.toString(), MetadataContentBean.class.getClass()); 

错误:

org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.Class out of START_OBJECT token at [Source: [email protected]; line: 1, column: 1] at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:159) at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:192) at org.codehaus.jackson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:439) at org.codehaus.jackson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:421) at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1588) at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1116) at com.path.parser.JSon.Parser(JSon.java:65) at com.path.parser.JSon.main(JSon.java:29)

什么它是什么意思?

也许如果我知道这一点,我可以找出我的错误。

回答

10

你的问题是最后一行:

MetadataContentBean.class.getClass() 

这意味着“让我为MetadataContentBean类Class对象,然后让我为Class对象Class对象” ......如果你看到我的意思是。所以你要求杰克逊将你的JSON反序列化为一个Class对象,它不知道该怎么做。

这应该只是

MetadataContentBean.class 
+0

谢谢,这是问题,但无论如何,我想知道错误的意义是什么! 再次感谢 – 2010-07-01 10:07:27

4

这可能涉及到其他问题,但只是为了完成答案,错误来自差异:键入“java.lang.Class中的”被序列化为JSON字符串(类名称本身),而不是像bean那样的JSON对象。所以反序列化器希望看到一个JSON字符串,而不是看到一个JSON对象(它以START_OBJECT开头)并抛出异常。

相关问题