这是我的班级结构:
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": [
{
...
}
]
}
我不希望雇员和雇员可以在我的JSON字符串中重复使用。我可以通过替换:
来解决它Business base = (Business)b;
使用:
Business base = new Business();
base.setXXX(b.getXXX());
base.setYYY(b.getYYY());
base.setZZZ(b.getZZZ());
但是我想避免使用这个深层副本,因为我的类结构有很多字段并且深度很多。杰克逊是否有办法避免重复基础和派生列表(通过一些简单的注释)?
修改 我只能使用Google Gson获得所需的结果:
Gson gson = new Gson();
String jsonUsingGson = gson.toJson(base);
知道如何使用杰克逊获得相同的结果仍然是好的。
答案 0 :(得分:0)
我认为,您的Parcelable
界面包含getEmployeesParcelable
方法。默认情况下,Jackson
序列化所有getter。为避免这种情况,您可以通过以下方式注释方法:
interface Parcelable {
@JsonIgnore
List<Employee> getEmployeesParcelable();
//other methods
}