zoukankan      html  css  js  c++  java
  • [转]FastJSON通过SerializeFilter定制序列化

    原文地址:https://github.com/alibaba/fastjson/wiki/SerializeFilter

    简介

    SerializeFilter是通过编程扩展的方式定制序列化。fastjson支持6种SerializeFilter,用于不同场景的定制序列化。

    1. PropertyPreFilter 根据PropertyName判断是否序列化
    2. PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化
    3. NameFilter 修改Key,如果需要修改Key,process返回值则可
    4. ValueFilter 修改Value
    5. BeforeFilter 序列化时在最前添加内容
    6. AfterFilter 序列化时在最后添加内容

    PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化

      public interface PropertyFilter extends SerializeFilter {
          boolean apply(Object object, String propertyName, Object propertyValue);
      }
    

    可以通过扩展实现根据object或者属性名称或者属性值进行判断是否需要序列化。例如:

        PropertyFilter filter = new PropertyFilter() {
    
            public boolean apply(Object source, String name, Object value) {
                if ("id".equals(name)) {
                    int id = ((Integer) value).intValue();
                    return id >= 100;
                }
                return false;
            }
        };
    
        JSON.toJSONString(obj, filter); // 序列化的时候传入filter
    

    PropertyPreFilter 根据PropertyName判断是否序列化

    和PropertyFilter不同只根据object和name进行判断,在调用getter之前,这样避免了getter调用可能存在的异常。

     public interface PropertyPreFilter extends SerializeFilter {
          boolean apply(JSONSerializer serializer, Object object, String name);
      }
    

    NameFilter 序列化时修改Key

    如果需要修改Key,process返回值则可

      public interface NameFilter extends SerializeFilter {
          String process(Object object, String propertyName, Object propertyValue);
      }
    

    ValueFilter 序列化是修改Value

      public interface ValueFilter extends SerializeFilter {
          Object process(Object object, String propertyName, Object propertyValue);
      }
    

    BeforeFilter 序列化时在最前添加内容

      public abstract class BeforeFilter implements SerializeFilter {
          protected final void writeKeyValue(String key, Object value) { ... }
          // 需要实现的抽象方法,在实现中调用writeKeyValue添加内容
          public abstract void writeBefore(Object object);
      }
    

    AfterFilter 序列化时在最前添加内容

      public abstract class AfterFilter implements SerializeFilter {
          protected final void writeKeyValue(String key, Object value) { ... }
          // 需要实现的抽象方法,在实现中调用writeKeyValue添加内容
          public abstract void writeAfter(Object object);
      }
    
  • 相关阅读:
    雅虎35条优化黄金守则
    安装入门
    NPOI 2.0 Excel读取显示
    STL算法
    MVVM框架avalon在兼容旧式IE
    Asp.Net MVC3.0网站统计登录认证的在线人数
    Windows Server 服务器安全配置
    SignalR的服务器广播
    angularjs + seajs构建Web Form3
    MVC应用程序显示上传的图片
  • 原文地址:https://www.cnblogs.com/dirgo/p/5178629.html
Copyright © 2011-2022 走看看