FastJson自定义复杂对象序列化

总结:

 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() {
			
			@Override
			public 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() {
					
			@Override
			public 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() {
			
			@Override
			public 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() {
			
			@Override
			public void writeBefore(Object object) {
				//这里可以做点有趣的事情
				Student student = (Student)object;
				student.setId(5);
				//对象属性已被修改
			}
		};
		String beforeFilterJsonS = JSON.toJSONString(s, beforeFilter);
		//********************AfterFilter 序列化时在最后添加内容***********************************
		AfterFilter afterFilter = new AfterFilter() {
			
			@Override
			public 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


猜你喜欢

转载自blog.csdn.net/qq_33300026/article/details/79289310