Excluding Fields From Serialization and Deserialization 过滤字段
Gson's @Expose 使用Annotaion 注解方式 @Expose
private String name;
private int age;
Gson g =new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
String pStr = g.toJson(p); p 为person 的实例
只会输出name 不会输出名字
{"name":"hsahga"}
反序列化同理
User Defined Exclusion Strategies 用户自定义排出策略 解决硬编码
public class MyExclusionStrategy implements ExclusionStrategy {
private Class<?>[] clazzs; // 要过滤得类数组
private String[] fileds; //要过滤的属性数组
public MyExclusionStrategy(Class<?>[] clazzs,String[] fileds) {
this.clazzs = clazzs;
this.fileds= fileds;
}
public MyExclusionStrategy(Class<?>[] clazzs)
{
this.clazzs = clazzs ;
}
public MyExclusionStrategy(String[] fileds)
{
this.fileds = fileds ;
}
@Override
public boolean shouldSkipClass(Class<?> clazz02) {
if (this.clazzs == null) {
return false;
}
for (int i = 0; i < this.clazzs.length; i++) {
if (clazz02.getName().equals(clazzs[i].getName())) {
return true;
}
}
return false;
}
@Override
public boolean shouldSkipField(FieldAttributes f) {
if(f == null)
{
return false ;
}
for(String field : this.fileds)
{
String[] str = field.split("_");
if(f.getDeclaringClass().toString().equals(str[1]))
{
if(str[0].equals(f.getName()))
{
return true ;
}
}
}
return false;
//要使用注解 排除属性 请解封下面这段话 并且屏蔽掉上面的
//return f.getAnnotation(NoSeriaizle.class) != null; 通过注解 (@NoSeriaizle)
}
}
或者通过注解 (@NoSeriaizle)
package Inner;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface NoSeriaizle {
}
在要使用的属性上:
@NoSeriaizle
private String name; 排除 name