总结:

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

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

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

package com.sward.dy;import static com.sward.dy.StaticFieldClass.testField;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.AfterFilter;
import com.alibaba.fastjson.serializer.BeforeFilter;
import com.alibaba.fastjson.serializer.NameFilter;
import com.alibaba.fastjson.serializer.PropertyFilter;
import com.alibaba.fastjson.serializer.SimplePropertyPreFilter;
import com.alibaba.fastjson.serializer.ValueFilter;
class Student{private Integer id;private String name;private char grander;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getGrander() {return grander;}public void setGrander(char grander) {this.grander = grander;}
}
/*** FastJson自定义复杂对象序列化* @author dy**/
public class StaticImportDemo {public static void main(String[] args) {//System.out.println(testField);Student s = new Student();s.setId(1);s.setName("xiaoming");s.setGrander('M');//******************************全部字段序列化*******************************************String jsonS = JSONObject.toJSONString(s);      //**************PropertyPreFilter根据PropertyName判断是否序列化 ***************************SimplePropertyPreFilter filter = new SimplePropertyPreFilter(Student.class,"name","id");String chooseJsonFieldS = JSONObject.toJSONString(s, filter);//*****PropertyFilter根据PropertyName和PropertyValue来判断是否序列化 ************************PropertyFilter propertyFilter = new PropertyFilter() {@Overridepublic boolean apply(Object object, String name, Object value) {//如果Value为小明就不序列化该字段if(value.equals(1))return false;                                //字段Name为grander就不序列化该字段if(name.equals("grander"))return false;return true;}};String chooseJsonFieldValueS = JSON.toJSONString(s,propertyFilter);//***************NameFilter修改Key,如果需要修改Key,process返回值则可 ************************NameFilter nameFileter = new NameFilter() {@Overridepublic String process(Object object, String name, Object value) {if(name.equals("name"))return "姓名";return name;}};String createJsonSNameBySelf = JSON.toJSONString(s, nameFileter);//******************ValueFilter修改Value*********************************************** ValueFilter valueFilter = new ValueFilter() {@Overridepublic Object process(Object object, String name, Object value) {if(name.equals("name")){return "xiaohong";}return value;}};String createJsonSValueBySelf = JSON.toJSONString(s, valueFilter);//*********************BeforeFilter 序列化时在最前添加内容 *********************************BeforeFilter beforeFilter = new BeforeFilter() {@Overridepublic void writeBefore(Object object) {//这里可以做点有趣的事情Student student = (Student)object;student.setId(5);//对象属性已被修改}};String beforeFilterJsonS = JSON.toJSONString(s, beforeFilter);//********************AfterFilter 序列化时在最后添加内容***********************************AfterFilter afterFilter = new AfterFilter() {@Overridepublic void writeAfter(Object object) {//这里可以做点有趣的事情Student student = (Student)object;student.setId(10);}};String afterFilterJsonS = JSON.toJSONString(s, afterFilter);//********************************输出结果********************************************System.out.println("jsonS=====================>"+jsonS);System.out.println("chooseJsonFieldS==========>"+chooseJsonFieldS);System.out.println("chooseJsonFieldValueS=====>"+chooseJsonFieldValueS);System.out.println("createJsonSNameBySelf=====>"+createJsonSNameBySelf);System.out.println("createJsonSValueBySelf====>"+createJsonSValueBySelf);System.out.println("beforeFilterJsonS=========>"+beforeFilterJsonS);System.out.println("afterFilterJsonS=========>"+afterFilterJsonS);System.out.println("s的Id值为:"+s.getId());}
}

结果:

jsonS=====================>{"grander":"M","id":1,"name":"xiaoming"}
chooseJsonFieldS==========>{"id":1,"name":"xiaoming"}
chooseJsonFieldValueS=====>{"name":"xiaoming"}
createJsonSNameBySelf=====>{"grander":"M","id":1,"姓名":"xiaoming"}
createJsonSValueBySelf====>{"grander":"M","id":1,"name":"xiaohong"}
beforeFilterJsonS=========>{"grander":"M","id":5,"name":"xiaoming"}
afterFilterJsonS=========>{"grander":"M","id":5,"name":"xiaoming"}
s的Id值为:10

FastJson自定义复杂对象序列化相关推荐

  1. FastJson实现复杂对象序列化与反序列化

    一.认识FastJson 1.优势 fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果说明比gson快大约6倍,fastjson采用独创的算法 ...

  2. 基于Golang的对象序列化的程序包开发——myJsonMarshal

    基于Golang的对象序列化的程序包开发--myJsonMarshal[阅读时间:约10分钟] 一.对象序列化概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体程序设计及 ...

  3. java培训教程分享:Java中怎样将数据对象序列化和反序列化?

    本期为大家介绍的java培训教程是关于"Java中怎样将数据对象序列化和反序列化?"的内容,相信大家都知道,程序在运行过程中,可能需要将一些数据永久地保存到磁盘上,而数据在Java ...

  4. .NET 中的对象序列化 (转载)

    .NET 中的对象序列化 Piet Obermeyer Microsoft Corporation 2001 年 8 月 摘要:为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便 ...

  5. java 对象怎么序列化,java对象序列化总结

    java对象序列化小结 百度百科上介绍序列化是这样的: 序列化 (Serialization): 将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储 ...

  6. C#[Serializable]在C#中的作用-NET 中的对象序列化

    为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本:按值将对象从一个应用程序域发送至另一个应用程序域.例如,序列化可用于在 ASP.NET 中保 ...

  7. YUDBModel【绿色插件】-对象序列化、反序列化、对象一键增删改查

    2019独角兽企业重金招聘Python工程师标准>>> 一.YUDBModel 介绍 架构: 使用runtime和Sqlite实现NSObject扩展类YUDBModel,直接实现( ...

  8. XML格式对象序列化(2)

    XStream与Java.Bean中XML工具的比较 XStream主要作用是将序列化的对象转化为一个XML文件或将XML文件解析为一个对象.当然并非只有它可以做到,很多其它工具一样可以,在Java中 ...

  9. string转成对象_详解Java I/O流(五),对象序列化

    对象序列化 什么是序列化和反序列化呢? 序列化就是将对象转成字节序列的过程,反序列化就是将字节序列重组成对象的过程. 在这里插入图片描述 为什么要有对象序列化机制 程序中的对象,其实是存在有内存中,当 ...

最新文章

  1. 在公共区块链中通过加密保护数据
  2. 2017 Multi-University Training Contest - Team 2 Puzzle
  3. C++ for循环跳过某一项求和
  4. iOS App 上架(Analysis 工具使用)
  5. Git commit后,本地代码丢失解决方法
  6. s3c6410 jpeg编码 linux,S3C6410 裸机硬件JPEG解码
  7. ASP.NET Core利用拦截器 IActionFilter实现权限控制
  8. SpringBoot学习笔记001--创建第一个spring boot应用
  9. 云计算运维累不累_要做好云计算运维管理,一定要注意这3个要点
  10. Linux命令之reset - 终端屏幕混乱的终结者
  11. codeblock 安装debug调试
  12. mfc之使用控制台Console输出调试信息
  13. 【气动学】基于matlab气动力导弹姿态控制【含Matlab源码 969期】
  14. gp3688 uhf2扩频_摩托罗拉GP3688_GP3188写频软件
  15. Windows资源管理器已停止工作的解决方法
  16. 脱离低级趣味- Python ‘\r‘, ‘\n‘, ‘\r\n‘ 的彻底理解
  17. Android app支付-银联支付
  18. 2023华为机考刷题指南:八周机考速通车
  19. 计算机考试报名不了怎么办,2017年国家公务员考试报名系统繁忙怎么办?
  20. 告别被拒,如何提升iOS审核通过率(上篇)

热门文章

  1. CSS入门(网页皮肉)——知识汇总①
  2. 虹科激光雷达传感器在无人机上的应用不可小觑
  3. OBS:绿幕抠像 chroma_key_filter.effect 笔记
  4. caffe源码深入学习6:超级详细的im2col绘图解析,分析caffe卷积操作的底层实现
  5. 2022年全球与中国科里奥利质量流量计行业发展趋势及投资战略分析报告
  6. 程序员为维持游戏开发被迫炒股
  7. 上海电力大学研究生计算机技术历年分数线,2019上海电力大学研究生分数线(以及历年复试)...
  8. 为什么你总被人蹭网?谈谈WiFi破解的两三事
  9. div制作表格,增减表格
  10. C++ LINK1104无法打开 **.lib文件