首页 > 解决方案 > 在杰克逊序列化后避免列表的类型信息

问题描述

我在 C# 中有一个类,如下所示,

class Person
{
  List<String> hobbies;
}

当我使用 Jaxb 将其转换为 Java 类时,它看起来像

class Person
{
  @XmlElement(name = "hobbies")
  ArrayOfString hobbies;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ArrayOfString", propOrder = {
    "string"
})
public class ArrayOfString {

    @XmlElement(nillable = true)
    protected List<String> string;
}

到目前为止一切都很好,但是现在当我尝试像这样使用 Jackson Objectmapper 将此对象转换为 Json 时,

ObjectMapper mapper = new ObjectMapper();
ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
String jsonString= ow.writeValueAsString(Person);

我得到如下的json输出,

{ 
     "hobbies" : { "string" : [ "reading","writing"] }
}

现在我需要 json 看起来像下面没有字符串关键字。

{ 
     "hobbies" : [ "reading","writing"] 
}

不幸的是,我无法更改 c# 生成的 xsd。有什么解决办法吗?

标签: javaserializationjackson

解决方案


不确定您的 JAXB 部分,但如果您将 bean 类定义为:

class Person
{
    private ArrayOfString hobbies;

    public ArrayOfString getHobbies() {
        return hobbies;
    }

    public void setHobbies(ArrayOfString hobbies) {
        this.hobbies = hobbies;
    }
}

class ArrayOfString {

    @JsonValue
    protected List<String> string;

    public List<String> getString() {
        return string;
    }

    public void setString(List<String> string) {
        this.string = string;
    }
}

@JsonValue注意字段上的注释protected List<String> string
现在您将获得预期的结果。

public static void main(String[] args) throws JsonProcessingException {
    Person person = new Person();
    person.hobbies = new ArrayOfString();
    person.hobbies.string = Arrays.asList("reading","writing");
    ObjectMapper mapper = new ObjectMapper();
    ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
    String jsonString= ow.writeValueAsString(person);
    System.out.println(jsonString);
}

输出

{
  "hobbies" : [ "reading", "writing" ]
}

注意:您仍然可以在没有副作用的 bean 上添加 JAXB 注释。


推荐阅读