繁体   English   中英

指定jackson序列化为object方法

[英]Specify jackson serialization as an object method

我正在寻找一个 class 来在一个方法中实现它自己的 json 序列化。 我想它可以扩展JsonSerializer<Itself> ,但这有点重。 还有别的办法吗?

这就是我要找的。

public class MyClass {

   private int fieldA;
   private String fieldB;

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

有这样的功能吗?

我已经调整了答案。 我想它更接近你正在寻找的东西?

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

一个简单的 main class 来测试序列化:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM