Fastjson定制属性的序列化和反序列化

问题

  1. 序列化属性时,希望在属性值后加些说明
  2. 将属性值中的时间戳 Timestamp 反序列化为Date 类型

方法

使用fastjson序列化时,可以在bean对象的属性上使用注解 @JSONField 做些序列化的规则,具体使用方法见参考资料。但有时候需要一些自定义化的序列化和反序列化方式,这时可以使用 serializeUsing 和 deserializeUsing 指定属性的序列化类和反序列化类

示例代码

User bean定义,指定属性序列化和反序列化方式

public class User {

    private String name;

    @JSONField(serializeUsing = AgeVauleSerializer.class)
    private int age;

    private String desc;

    /**
     * 自定义date反序列化方式,注意序列化时也会被序列化成时间戳
     * 也可以用format="yyyy-MM-dd HH:mm:ss"定义序列化格式
     */
    @JSONField(deserializeUsing = TimestampValueDeserializer.class)
    private Date date;

    ……
    //get、set方法省略

AgeVauleSerializer 定义属性age的序列化方式。

public class AgeVauleSerializer implements ObjectSerializer {

    @Override
    public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
                      int features) throws IOException {
        Integer value = (Integer) object;
        String text = value + " year-old";
        serializer.write(text);
    }
}

TimestampValueDeserializer 定义属性date的反序列化方式。

public class TimestampValueDeserializer implements ObjectDeserializer {

    @Override
    public Date deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
        long timestamp = parser.getLexer().longValue();
        return new Date(timestamp);

    }

    @Override
    public int getFastMatchToken() {
        return 0;
    }

}

参考资料

JSONField文档说明

你可能感兴趣的:(Java)