我有以下类,我可以按照我想要的方式序列化它。
@JsonSerialize(using = MySerializer.class)
@JsonDeserialize(using = MyDeserialize.class)
public class TryToSerialize extends ArrayList<String>
{
private int number;
private String word;
public TryToSerialize(){}
public TryToSerialize(int number, String word){
this.number = number;
this.word = word;
}
@JsonProperty
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@JsonProperty
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
}
它已使用以下序列化器序列化
class MySerializer extends JsonSerializer<TryToSerialize>
{
@Override
public void serialize(TryToSerialize toSerialize, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException
{
jgen.writeStartObject();
jgen.writeNumberField("number", toSerialize.getNumber());
jgen.writeStringField("word", toSerialize.getWord());
provider.defaultSerializeField("values", toSerialize.iterator(), jgen);
jgen.writeEndObject();
}
}
此代码会将对象序列化为以下内容:
{"number":10,"word":"Working","values":["first","second","third"]}
现在我正在尝试反序列化它,但我不确定如何处理 ArrayList 部分。到目前为止我有这样的事情:
class MyDeserialize extends JsonDeserializer<TryToSerialize> {
@Override
public TryToSerialize deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
int number = (Integer) ((IntNode) node.get("number")).numberValue();
String word = node.get("word").asText();
return new TryToSerialize(number, word);
}
}
任何帮助将不胜感激。
最佳答案
到目前为止,您所拥有的一个选项是,由于您有可用的 JsonNode 并且您知道您已将列表序列化到属性 values
中,因此可以迭代 values
code> 属性并将内容添加到您的类中。
class MyDeserializer extends JsonDeserializer<TryToSerialize> {
@Override
public TryToSerialize deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
int number = (Integer) ((IntNode) node.get("number")).getNumberValue();
String word = node.get("word").asText();
TryToSerialize deserialized = new TryToSerialize(number, word);
JsonNode valuesNode = node.get("values");
if (valuesNode.isArray()) {
Iterator<JsonNode> arrayIterator = ((ArrayNode) valuesNode).getElements();
while (arrayIterator.hasNext()) {
deserialized.add(arrayIterator.next().getTextValue());
}
}
return deserialized;
}
}
关于java - 使用 Jackson 反序列化扩展 ArrayList 的 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129695/