/**
*Gson序列化对象排除属性
*调用方法:
*String[] keys = { "id" };
*Gson gson = new GsonBuilder().setExclusionStrategies(new JsonKit(keys)).create();
*/
public class JsonKit implements ExclusionStrategy {
String[] keys;
public JsonKit(String[] keys) {
this.keys = keys;
}
@Override
public boolean shouldSkipClass(Class<?> arg0) {
return false;
}
@Override
public boolean shouldSkipField(FieldAttributes arg0) {
for (String key : keys) {
if (key.equals(arg0.getName())) {
return true;
}
}
return false;
}
}
Gson解析json数据很是强大,但有的时候如果使用不当,也很麻烦。
1 “循环序列化” 异常
解决方法为在可能造成的循环序列化的字段加上 transient。
1
|
transient
private
Menu parent;
//父节点
|
2 排序特定字段
比如 :User的json数据为{id:”1” , name:”syxchina”, password:”syx”},我们解析的时候是不想把password解析,我们想得到格式为:{id:”1” , name:”syxchina”}。
第一种方法是使用Gson自带的注解,但任何时候取数据都没的那个字段。
第二种方法使用GsonBuilder,设置ExclusionStrategy参数。
//原串:{id:"1" , name:"syx", password:"syx"}
//效果:{id:"1" , name:"syx"}
privatestaticGson gsonMenuComboTree =newGsonBuilder()//
.setExclusionStrategies(newMenuTreeExclusionStrategy())//
.create();
private static class MenuTreeExclusionStrategyimplementsExclusionStrategy{
publicbooleanshouldSkipField(FieldAttributes f) {
if("password".equals(f.getName()))returntrue;
returnfalse;
}
publicbooleanshouldSkipClass(Class<?> clazz) {
returnfalse;
}
}
3 修改字段json显示
private static class MenuTreeFieldNamingStrategyimplementsFieldNamingStrategy {
publicString translateName(Field f) {
if("password".equals(f.getName())) {
return"modifyField";
}
returnf.getName();
}
}