gpt4 book ai didi

java - JSON对象映射器: avoid listing derived class in serialized JSON string

转载 作者:太空宇宙 更新时间:2023-11-04 15:10:03 24 4
gpt4 key购买 nike

这是我的类结构:

public class Business {
public long id;
public List<Employee> employees;
// constructors, getters, setters
}
public class BusinessParcelable extends Business implements Parcelable {
// some functions, not additional fields
}

public class Employee {
// fields, constructor, getters, setters
}
public class EmployeeParcelable extends Employee implements Parcelable {
// some functions, no additional fields
}

如果我使用以下代码将其序列化为 JSON 字符串:

someFunction(BusinessParcelable b) {
ObjectMapper objectMapper = new ObjectMapper();
Business base = (Business)b;
String jsonString = objectMapper.writeValueAsString(base);
}

jsonString 看起来像:

{
"id": 15,
"employees": [
{
...
}
],
"employeesParcelable": [
{
...
}
]
}

我不希望员工和员工Parcelable 在我的 JSON 字符串中重复。我可以通过替换来解决它:

Business base = (Business)b;

与:

Business base = new Business();
base.setXXX(b.getXXX());
base.setYYY(b.getYYY());
base.setZZZ(b.getZZZ());

但我想避免这种深层复制,因为我的类结构有很多字段并且是多个级别的深度。 Jackson 有办法避免重复基本列表和派生列表(通过一些简单的注释)吗?

编辑:我刚刚能够使用 Google Gson 获得所需的结果:

Gson gson = new Gson();
String jsonUsingGson = gson.toJson(base);

不过,了解如何使用 Jackson 获得相同的结果仍然是件好事。

最佳答案

我认为,您的 Parcelable 接口(interface)包含 getEmployeesParcelable 方法。默认情况下,Jackson 序列化所有 getter。为了避免这种情况,您可以通过以下方式注释您的方法:

interface Parcelable {

@JsonIgnore
List<Employee> getEmployeesParcelable();

//other methods
}

关于java - JSON对象映射器: avoid listing derived class in serialized JSON string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21444795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com