fastjson @JSONField 自定义序列化、反序列化


fastjson 自定义序列化、反序列化

 

 

*******************

相关类与接口

 

ObjectSerializer

public interface ObjectSerializer {
    
    void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException;
}

 

ObjectDeserializer

public interface ObjectDeserializer {

    <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName);
    
    int getFastMatchToken();
}

 

 

*******************

示例

 

CustomSerializer:序列化类

public class CustomSerializer implements ObjectSerializer {

    @Override
    public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
        serializer.write("gtlx "+object);
    }
}

 

CustomDeserializer:反序列化类

public class CustomDeserializer implements ObjectDeserializer {

    @Override
    @SuppressWarnings("unchecked")
    public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
        if (type.getTypeName().contains("String")){
            String text=(String)parser.parse(fieldName);

            return (T)("hello "+text.split(" ")[1]);
        }

        return (T)parser.parse(fieldName);
    }

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

 

Test3:测试类

@Data
class Student{

    private String id;

    @JSONField(serializeUsing = CustomSerializer.class,deserializeUsing = CustomDeserializer.class)
    private String name;
    private Integer age;
}

public class Test3 {

    public static void main(String[] args){
        Student student=new Student();
        student.setId("2");
        student.setName("瓜田李下");
        student.setAge(20);

        String jsonString=JSON.toJSONString(student);
        System.out.println(jsonString);

        Student s=JSON.parseObject(jsonString,Student.class);
        System.out.println(s);
    }
}

 

***************

控制台输出

 

{"age":20,"id":"2","name":"gtlx 瓜田李下"}
Student(id=2, name=hello 瓜田李下, age=20)

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Fastjson是一个Java语言编写的JSON处理库,@JSONFieldFastjson提供的注解之一。 @JSONField注解用于指示在序列化反序列化过程中如何处理Java对象的字段。它可以应用于类的字段或者类的setter和getter方法,并提供了一些属性来自定义字段的行为。 使用@JSONField注解,可以实现以下功能: 1. 指定字段的名称:通过设置name属性,可以指定将Java对象字段序列化JSON时的字段名称。例如: ``` @JSONField(name = "id") private int userId; ``` 以上代码将Java对象中的userId字段序列化JSON时,字段名为"id"。 2. 排除字段:通过设置serialize属性为false,可以在序列化对象时排除这个字段。例如: ``` @JSONField(serialize = false) private String password; ``` 以上代码将在序列化对象时,忽略password字段。 3. 指定字段的格式化方式:通过设置format属性,可以指定字段序列化反序列化时所使用的格式。例如: ``` @JSONField(format = "yyyy-MM-dd") private Date createTime; ``` 以上代码将使用"yyyy-MM-dd"格式处理createTime字段。 4. 自定义字段的序列化反序列化逻辑:通过设置serializeUsing和deserializeUsing属性,可以指定自定义序列化反序列化器来处理字段。例如: ``` @JSONField(serializeUsing = CustomSerializer.class) private SomeObject someObject; ``` 以上代码将使用CustomSerializer来序列化someObject字段。 总之,@JSONFieldFastjson中一个非常有用的注解,可以通过它来控制字段的序列化反序列化方式,实现更加灵活的JSON数据处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值