将Jackson序列化指定为对象方法

nkkqxpd9  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(67)

我正在寻找一个类来实现它自己的json序列化的方法。我想它可以扩展JsonSerializer<Itself>,但是这有点重。有没有其他的方法?
这就是我要找的东西。

public class MyClass {

   private int fieldA;
   private String fieldB;

   @JsonSerializer
   public void serialize(JsonGenerator gen, SerializationProvider prov){
     gen.writeField(...)
   }
}

有没有这样的功能?

csga3l58

csga3l581#

我修改了一下答案。我想它更接近你要找的答案。

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;

@JsonSerialize(using = MyClass2.class)
class MyClass2 extends StdSerializer<MyClass2> {
    protected int fieldA;
    protected String fieldB;

    public MyClass2() {
        super(MyClass2.class);
    }

    public void setFieldA(int fieldA) {
        this.fieldA = fieldA;
    }

    public void setFieldB(String fieldB) {
        this.fieldB = fieldB;
    }

    @Override
    public void serialize(MyClass2 value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeStartObject();
        gen.writeNumberField("fieldA", value.fieldA);
        gen.writeStringField("fieldB", value.fieldB);
        gen.writeEndObject();
    }
}

测试序列化的简单主类:

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TestAutoSerializer2 {

    public TestAutoSerializer2() {
        super();
    }
    
    public void testInnerSerializer2() {
        MyClass2 myClass2 = new MyClass2();
        myClass2.setFieldA(100);
        myClass2.setFieldB("StackOverflow");

        String serialized;
        try {
            serialized = new ObjectMapper().writeValueAsString(myClass2);
            System.out.println(getClass().getName()+" serialized to "+serialized);
        } catch (JsonProcessingException e) {
            System.out.println("Cannot serialize");
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        TestAutoSerializer2 tester = new TestAutoSerializer2();
        tester.testInnerSerializer2();
    }
}

相关问题