java - 在杰克逊序列化后避免列表的类型信息
问题描述
我在 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。有什么解决办法吗?
解决方案
不确定您的 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 注释。
推荐阅读
- javascript - 如何在 Discord.JS v12 中查看用户正在玩的游戏
- python - 当 src 由函数给出时,如何在 Flask 中显示图像?
- dataframe - 如何根据不同数据框的列值从pyspark数据框中过滤掉行
- c - 在C中使用堆栈二进制到十进制
- java - Telegram Java bot 部署有问题
- java - java中的凸起效果
- api - 无法使用空手道框架上传文件
- reactjs - Ant design 4 表格加载无法正常工作
- reactjs - 此表达式不可调用。输入“重击”
' 没有调用签名 - java - 尝试通过 MediaStore.createDeleteRequest(getContentResolver(), uris) 为 Android R (API 30) 为范围存储创建删除请求的异常