当前位置:   article > 正文

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

deserializeusing

问题

  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方法省略
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

参考资料

JSONField文档说明

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
  

闽ICP备14008679号