![](/img/trans.png)
[英]Jackson ObjectMapper - specify serialization order of object properties
[英]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.