1

基本的にWebサービスからの応答である次のクラスがあります。

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?
4

1 に答える 1

1

type eraseのようなものがあるため、ジェネリック型は消去され、実行時に使用できなくなります。

したがって、一般的な分類子を使用せずにクラスを提供するオブジェクトを逆シリアル化し、適切な型に「キャスト」することができます。

しかし、問題はジェネリック型の逆シリアル化ではなく、java.lang.Classオブジェクトを含む型です。これはシリアル化および逆シリアル化できません。

シリアライゼーションとデシリアライゼーションでは、クラス フィールドのないオブジェクトを使用するか、クラス名のある文字列フィールドを使用するか、このフィールドをマークしtransientて後で復元する必要があります。

于 2013-01-28T20:35:00.840 に答える