我有以下通用类,我正在尝试使用Gson库进行序列化。
public class TRequest<T> implements RealmModel {
private RealmList<T> requestList;
public RealmList<T> getRequestList() {
return requestList;
}
public void setRequestList(RealmList<T> requestList) {
this.requestList = requestList;
}
}
已编写以下代码对数据进行序列化
//crate fitness object
Fitness fitness = new Fitness();
fitness.set_id("100");
fitness.setIntensity("2300");
//create realm list
RealmList<Fitness> fitnessRealmList = new RealmList<Fitness>();
fitnessRealmList.add(fitness);
//create tRequest object
TRequest<Fitness> tRequest = new TRequest<Fitness>();
tRequest.setRequestList(fitnessRealmList);
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
//serialize it
String stringData = gson.toJson(tRequest);
结果是我得到以下输出
{“ requestList”:[{“ _ id”:“ 100”,“ intensity”:“ 2300”}]}
由于我的班级是通用的,我想将属性值动态从“ requestList”更改为“ fitness”。同样,如果我要序列化常规对象,则应将“ requestList”替换为“ routine”。
预期输出为
{“健身”:[{“ _ id”:“ 100”,“强度”:“ 2300”}]}
我尝试了如下类型的令牌,但是没有用
Type type = new TypeToken<Fitness>(){}.getType();
String stringData = gson.toJson(tRequest,type);
答案 0 :(得分:1)
我将尝试按此处说明的方法使用自定义序列化程序:link
这里是一个例子:
public class TRequest<T> {
private final String attributeName;
private RealmList<T> requestList;
public TRequest(String attributeName) {
this.attributeName = attributeName;
}
public String getAttributeName() {
return attributeName;
}
public RealmList<T> getRequestList() {
return requestList;
}
public void setRequestList(RealmList<T> requestList) {
this.requestList = requestList;
}
}
public class MySerializer implements JsonSerializer<TRequest<?>> {
@Override
public JsonElement serialize(TRequest<?> t, Type type, JsonSerializationContext jsc) {
JsonObject obj = new JsonObject();
obj.add(t.getAttributeName(), jsc.serialize(t.getRequestList()));
return obj;
}
}
//when using it
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(TRequest.class, new MySerializer());
Gson gson = builder.create();
String toJson = gson.toJson(tRequest);