Java “反序列化”;[……”是;json作为空列表

Java “反序列化”;[……”是;json作为空列表,java,json,serialization,Java,Json,Serialization,我有一个带有ListlistField的类。此字段的JSON部分类似于“listField”:“[]”。我使用以下代码进行反序列化: ObjectMapper mapper = new ObjectMapper(); MyClass myClass = mapper.readValue(jsonAsString, MyClass.class); 但会引发一个异常: com.fasterxml.jackson.databind.JsonMappingException:无法反序列化java.ut

我有一个带有
List
listField的类。此字段的JSON部分类似于
“listField”:“[]”
。我使用以下代码进行反序列化:

ObjectMapper mapper = new ObjectMapper();
MyClass myClass = mapper.readValue(jsonAsString, MyClass.class);
但会引发一个异常:

com.fasterxml.jackson.databind.JsonMappingException:无法反序列化java.util.ArrayList的实例超出值\u字符串标记

fasterxml.jackson版本2.2.3


您能帮我解决这个问题吗?

除了自定义反序列化程序外,还可以添加新的setter并忽略旧的setter。这对我有帮助

    @JsonProperty("listField")
    public void setListFieldAsString(String listFieldAsString) {
        List<BigInteger> listFieldAsList = new ArrayList<BigInteger>();

        try {
            ObjectMapper objectMapper = new ObjectMapper();
            listFieldAsList = objectMapper.readValue(listFieldAsString, new TypeReference<List<BigInteger>>() {});
        } catch (IOException e) {
            System.out.println("Error was detected!");
        }
        setListField(listFieldAsList);
    }

    @JsonIgnore
    public void setListField(List<BigInteger> listField) {
        this.listField = listField;
    }
@JsonProperty(“listField”)
public void setListFieldAsString(字符串listFieldAsString){
List listFieldAsList=new ArrayList();
试一试{
ObjectMapper ObjectMapper=新的ObjectMapper();
listFieldAsList=objectMapper.readValue(listFieldAsString,new TypeReference(){});
}捕获(IOE异常){
System.out.println(“检测到错误!”);
}
setListField(listFieldAsList);
}
@杰索尼奥雷
公共无效集合列表字段(列表列表字段){
this.listField=listField;
}

除了自定义反序列化程序,还可以添加新的setter并忽略旧的setter。这对我有帮助

    @JsonProperty("listField")
    public void setListFieldAsString(String listFieldAsString) {
        List<BigInteger> listFieldAsList = new ArrayList<BigInteger>();

        try {
            ObjectMapper objectMapper = new ObjectMapper();
            listFieldAsList = objectMapper.readValue(listFieldAsString, new TypeReference<List<BigInteger>>() {});
        } catch (IOException e) {
            System.out.println("Error was detected!");
        }
        setListField(listFieldAsList);
    }

    @JsonIgnore
    public void setListField(List<BigInteger> listField) {
        this.listField = listField;
    }
@JsonProperty(“listField”)
public void setListFieldAsString(字符串listFieldAsString){
List listFieldAsList=new ArrayList();
试一试{
ObjectMapper ObjectMapper=新的ObjectMapper();
listFieldAsList=objectMapper.readValue(listFieldAsString,new TypeReference(){});
}捕获(IOE异常){
System.out.println(“检测到错误!”);
}
setListField(listFieldAsList);
}
@杰索尼奥雷
公共无效集合列表字段(列表列表字段){
this.listField=listField;
}

为什么JSON字段
“listField”:“[]”“
而不是
“listField”:[]
?@khelwood,这是服务器响应。json错误吗?
[]
是json中的空数组<代码>“[]”是一个包含两个括号的字符串。如果你希望它是一个数组,那就错了。@khelwood,你是对的。服务器端有
@JsonSerialize(使用=ToStringSerializer.class)
注释。但是我可以从这个字符串值中检索列表吗?为什么JSON字段
“listField”:“[]”“
而不是
“listField”:[]
?@khelwood,这是服务器响应。json错误吗?
[]
是json中的空数组<代码>“[]”是一个包含两个括号的字符串。如果你希望它是一个数组,那就错了。@khelwood,你是对的。服务器端有
@JsonSerialize(使用=ToStringSerializer.class)
注释。但我可以从这个字符串值中检索列表吗?