Невозможно десериализовать экземпляр java.lang. Класс из маркера START_OBJECT. - PullRequest
5 голосов
/ 01 июля 2010

Я не могу точно понять, какую ошибку я получаю при запуске этого кода:

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 out of START_OBJECT жетон на [Источник: java.io.StringReader@e3b895; строка 1, колонка: 1] в 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 ]

11 голосов
/ 01 июля 2010

Ваша проблема - последняя строка:

MetadataContentBean.class.getClass()

Это значит «получить мне объект Class для класса MetadataContentBean, а затем получить объект Class для этого Class объекта» .... если вы понимаете, о чем я. Итак, вы просите Джексона десериализовать ваш JSON на объект Class, чего он не знает, как это сделать.

Это должно быть просто

MetadataContentBean.class
4 голосов
/ 10 июля 2010

Это, вероятно, связано с другим вопросом, но просто для завершения ответа ошибка возникает из-за несоответствия: тип "java.lang.Class" сериализуется как строка JSON (само имя класса), а не как объект JSON, такой как бобы есть. Таким образом, десериализатор ожидает увидеть строку JSON, вместо этого видит объект JSON (который начинается с START_OBJECT) и выдает исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...