繁体   English   中英

JSON对象映射器:避免在序列化的JSON字符串中列出派生类

[英]JSON object mapper: avoid listing derived class in serialized JSON string

这是我的课程结构:

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字符串中重复employee和employeeParcelable。 我可以通过替换来解决:

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);

不过,仍然知道如何使用杰克逊获得相同的结果仍然是很好的。

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

interface Parcelable {

    @JsonIgnore
    List<Employee> getEmployeesParcelable();

    //other methods
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM