JSON

Gson学习笔记(2)

字号+ 作者:H5之家 来源:H5之家 2015-10-20 16:05 我要评论( )

{name:'GREETINGS',source:'guest'} 不会被解析称Event 类 Excluding Fields From Serialization and Deserialization过滤字段 Gson's @Expose 使用Annotaion注解方式@Expose private String name; private int age


{name:'GREETINGS',source:'guest'} 不会被解析称Event 类

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

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评