无法从 START_OBJECT 令牌反序列化 java.lang.Class 的实例
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3156674/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Can not deserialize instance of java.lang.Class out of START_OBJECT token
提问by Blanca Hdez
I can't understand propperly the error I get when I run this code:
我无法正确理解运行此代码时遇到的错误:
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());
Error:
错误:
org.codehaus.Hymanson.map.JsonMappingException: Can not deserialize instance of java.lang.Class out of START_OBJECT token at [Source: java.io.StringReader@e3b895; line: 1, column: 1] at org.codehaus.Hymanson.map.JsonMappingException.from(JsonMappingException.java:159) at org.codehaus.Hymanson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:192) at org.codehaus.Hymanson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:439) at org.codehaus.Hymanson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:421) at org.codehaus.Hymanson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1588) at org.codehaus.Hymanson.map.ObjectMapper.readValue(ObjectMapper.java:1116) at com.path.parser.JSon.Parser(JSon.java:65) at com.path.parser.JSon.main(JSon.java:29)
org.codehaus.Hymanson.map.JsonMappingException:无法从 START_OBJECT 令牌中反序列化 java.lang.Class 的实例 [来源:java.io.StringReader@e3b895; line: 1, column: 1] at org.codehaus.Hymanson.map.JsonMappingException.from(JsonMappingException.java:159) at org.codehaus.Hymanson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:192) at org .codehaus.Hymanson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:439) at org.codehaus.Hymanson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:421) at org.codehaus.Hyman .map.ObjectMapper._readMapAndClose(ObjectMapper.java:1588) at org.codehaus.Hymanson.map.ObjectMapper.readValue(ObjectMapper.java:1116) at com.path.parser.JSon.Parser(JSon.java:65) at com。
What does it mean??
这是什么意思??
Maybe if I know this, I could find out my error.
也许如果我知道这一点,我可以找出我的错误。
采纳答案by skaffman
Your problem is the last line:
你的问题是最后一行:
MetadataContentBean.class.getClass()
This means "get me the Class
object for the MetadataContentBean class, and then get me the Class
object for that Class
object".... if you see what I mean. So you're asking Hymanson to deserialize your JSON onto a Class
object, which it doesn't know how to do.
这意味着“为我获取Class
MetadataContentBean 类的对象,然后为我获取该Class
对象的Class
对象”......如果你明白我的意思。因此,您要求 Hymanson 将您的 JSON 反序列化为一个Class
对象,但它不知道该怎么做。
This should be just
这应该只是
MetadataContentBean.class
回答by StaxMan
This is probably related to the other question, but just to complete the answer, error comes from discrepancy: type "java.lang.Class" is serialized as a JSON String (class name itself), and not as JSON object like beans are. So deserializer expects to see a JSON String, instead sees a JSON Object (which starts with START_OBJECT) and throws exception.
这可能与另一个问题有关,但只是为了完成答案,错误来自差异:类型“java.lang.Class”被序列化为 JSON 字符串(类名本身),而不是像 bean 那样的 JSON 对象。所以反序列化器希望看到一个 JSON 字符串,而不是看到一个 JSON 对象(以 START_OBJECT 开头)并抛出异常。