在项目开发中经常会遇到一些业务需要对某些数据进行特殊的定制化处理,fastjson为我们提供了接口可以用于实现自定义的编解码器来完成我们的业务要求。
ObjectSerializer和ObjectDeserializer分别是fastjson的编码器和解码器接口。
ObjectDeserializer接口源码:
/**
* <p>Interface representing a custom deserializer for Json. You should write a custom
* deserializer, if you are not happy with the default deserialization done by Gson. You will
* also need to register this deserializer through
* {@link ParserConfig#putDeserializer(Type, ObjectDeserializer)}.</p>
* <pre>
* public static enum OrderActionEnum {
* FAIL(1), SUCC(0);
*
* private int code;
*
* OrderActionEnum(int code){
* this.code = code;
* }
* }
*
* public static class OrderActionEnumDeser implements ObjectDeserializer {
*
* public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
* Integer intValue = parser.parseObject(int.class);
* if (intValue == 1) {
* return (T) OrderActionEnum.FAIL;
* } else if (intValue == 0) {
* return (T) OrderActionEnum.SUCC;
* }
* throw new IllegalStateException();
* }
*
*
* public int getFastMatchToken() {
* return JSONToken.LITERAL_INT;
* }
* }
* </pre>
*
* <p>You will also need to register {@code OrderActionEnumDeser} to ParserConfig:</p>
* <pre>
* ParserConfig.getGlobalInstance().putDeserializer(OrderActionEnum.class, new OrderActionEnumDeser());
* </pre>
*/
public interface ObjectDeserializer {
/**
* fastjson invokes this call-back method during deserialization when it encounters a field of the
* specified type.
* <p>In the implementation of this call-back method, you should consider invoking
* {@link JSON#parseObject(String, Type, Feature[])} method to create objects
* for any non-trivial field of the returned object.
*
* @param parser context DefaultJSONParser being deserialized
* @param type The type of the Object to deserialize to
* @param fieldName parent object field name
* @return a deserialized object of the specified type which is a subclass of {@code T}
*/
<T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName);
int getFastMatchToken();
}
ObjectSerializer接口源码:
/**
* Interface representing a custom serializer for fastjson. You should write a cus