Java 如何反序列化泛型类型的对象?
//用户飞到这里Java 如何反序列化泛型类型的对象?,java,json,generics,gson,json-deserialization,Java,Json,Generics,Gson,Json Deserialization,//用户飞到这里 public class ResponseData<T> { @SerializedName("status") private String mStatus; @SerializedName("description") private String mDescription; @SerializedName("data") private ArrayList<T> mData; @Seriali
public class ResponseData<T>
{
@SerializedName("status")
private String mStatus;
@SerializedName("description")
private String mDescription;
@SerializedName("data")
private ArrayList<T> mData;
@SerializedName("error_code")
private int mErrorCode;
public String getStatus() {return mStatus;}
public String getDescription() { return mDescription;}
public ArrayList<T> getData() { return mData; }
}
public class BaseData {}
public class UserData extends BaseData {}
//这里有一些位置字段
public class ResponseData<T>
{
@SerializedName("status")
private String mStatus;
@SerializedName("description")
private String mDescription;
@SerializedName("data")
private ArrayList<T> mData;
@SerializedName("error_code")
private int mErrorCode;
public String getStatus() {return mStatus;}
public String getDescription() { return mDescription;}
public ArrayList<T> getData() { return mData; }
}
public class BaseData {}
public class UserData extends BaseData {}
//Json反序列化程序
public class LocationData extends BaseData {}
JsonDeserializer应返回mData为LocationData类型的arraylist的ResponseData或mData为UserData类型的arraylist的ResponseData。首先
其次,您需要使用类型标记。TypeToken
是一种伪黑客,可以绕过类型擦除的一些限制
您需要创建一个类型标记
{"data":[{"username":"james","email":"james@gmail.com","height":72.0,"phone":"+15555555555"}], "error_code": 0, "description":null }
{"data":[{"latidue":40.022022,"longitude":-29.23939, "street":"union ave", "borough":"manhattan"}', "error_code": 0, "description":null }
对于每个参数化版本的ResponseData
,您需要有一个TypeToken
相关的: