无法从START_OBJECT标记中反序列化java.lang.Class的实例

时间:2010-07-01 09:51:40

标签: java jackson

我无法正确理解运行此代码时出现的错误:

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:   无法反序列化实例   java.lang.Class超出了START_OBJECT   令牌在[来源:   java.io.StringReader@e3b895;行:1,   专栏:1] at   org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:159)     在   org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:192)     在   org.codehaus.jackson.map.deser.StdDeserializer $ ClassDeserializer.deserialize(StdDeserializer.java:439)     在   org.codehaus.jackson.map.deser.StdDeserializer $ ClassDeserializer.deserialize(StdDeserializer.java:421)     在   org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1588)     在   org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1116)     在   com.path.parser.JSon.Parser(JSon.java:65)     在   com.path.parser.JSon.main(JSon.java:29)

这意味着什么?

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

2 个答案:

答案 0 :(得分:11)

你的问题是最后一行:

MetadataContentBean.class.getClass()

这意味着“获取MetadataContentBean类的Class对象,然后获取该Class对象的Class对象”....如果你明白我的意思。因此,您要求杰克逊将您的JSON反序列化为Class对象,而该对象不知道该怎么做。

这应该只是

MetadataContentBean.class

答案 1 :(得分:4)

这可能与另一个问题有关,但只是为了完成答案,错误来自差异:类型“java.lang.Class”序列化为JSON字符串(类名本身),而不是像JSON对象那样豆是。所以deserializer希望看到一个JSON String,而是看到一个JSON对象(以START_OBJECT开头)并抛出异常。