起
litepal是什么,可百度!
Datasupport是Litepal最基本的数据库对象,类似于JPA的Repository。
问题便是:Datasupport子类在用gson序列化时,Datasupport自身的属性如何被剔除。
承
不想另外定义一个DTO对象,但直接使用Datasupport的子类又会受上述问题影响。
然后就用到了gson的GsonBuilder来创建自定义的过滤策略,将相应属性剔除即可。
public class MyLitepalGson extends MyGson {
public MyLitepalGson() {
super(customizeGson());
}
private static String[] litepalExcludes = {"baseObjId", "associatedModelsMapWithFK",
"associatedModelsMapWithoutFK", "associatedModelsMapForJoinTable",
"listToClearSelfFK", "listToClearAssociatedFK", "fieldsToSetToDefault"};
private static Gson customizeGson() {
return new GsonBuilder().addSerializationExclusionStrategy(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
for (String exclude : litepalExcludes) {
if (exclude.equals(f.getName())) {
return true;
}
}
return false;
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
}).create();
}
}
public class MyGson {
private Gson gson;
public MyGson() {
gson = new Gson();
}
public MyGson(Gson gson) {
this.gson = gson;
}
public <T> T fromJson(String json, Type typeOfT) {
try {
return gson.fromJson(json, typeOfT);
} catch (JsonSyntaxException e) {
e.printStackTrace();
return null;
}
}
public <T> T fromJson(JsonElement json, Class<T> classOfT) {
try {
return gson.fromJson(json, classOfT);
} catch (JsonSyntaxException e) {
e.printStackTrace();
return null;
}
}
public String toJson(Object src) {
return gson.toJson(src);
}
}
结