2013-01-28 2 views
1

У меня есть следующий класс, который в основном является ответом от веб-службы.GSON deserializing generic type

public class WSGenericMessage<T> implements Serializable { 

private static final long serialVersionUID = 1L; 
private Boolean ResponseCode; 
private String ResponseMessage; 
private Class<T> ResponseData; 

public Boolean getResponseCode() { 
    return ResponseCode; 
} 

public void setResponseCode(Boolean responseCode) { 
    ResponseCode = responseCode; 
} 

public String getResponseMessage() { 
    return ResponseMessage; 
} 

public void setResponseMessage(String responseMessage) { 
    ResponseMessage = responseMessage; 
} 

public Class<T> getResponseData() { 
    return ResponseData; 
} 

public void setResponseData(Class<T> responseData) { 
    ResponseData = responseData; 
} 

} 

Можно ли десериализации JSON строку в следующим образом:

Gson gson = new Gson(); 
    Type type = new TypeToken<WSGenericMessage<String>>(){}.getType(); 
    gson.fromJson(result, type); 

я получаю:

java.lang.UnsupportedOperationException: Attempted to deserialize a java.lang.Class. Forgot to register a type adapter? 

ответ

1

Там что-то вроде типа стиранием, поэтому общие типы стираются и недоступны во время выполнения.

Таким образом, вы можете десериализовать объект, предоставляя класс без общих классификаторов, а не «отбрасывать» на соответствующий тип.

Но проблема заключается не в десериализации дженериков, а в типе, содержащем объект java.lang.Class. Это не может быть сериализовано и десериализовано.

Для сериализации и десериализации вы должны использовать объекты без поля класса, использовать поле String с именем класса или пометить это поле как transient и восстановить его впоследствии.

+0

«Это не может быть сериализовано и десериализовано» - Почему бы и нет? 'Class' реализует' Serializable'. Просьба уточнить ваш ответ. –

+1

GSON не может справиться с этим. –

+4

Правильно, и я могу догадаться, почему. Я просто прошу вас прояснить причину, кроме только «стирания типа» для OP. Было бы неплохо понять сообщение об исключении. –

Смежные вопросы