Jackson 倾向于支持注释支持的常见场景和良好的设计选择。
您的案例代表了一种非常罕见的情况。您有一个字段在不同的上下文中具有两种不同的含义。通常这不会是一种有利的数据格式,因为它在另一端给消费者添加了混乱的逻辑......他们需要知道“Json”属性在每种情况下应该意味着什么。如果您只使用两个不同的属性名称,对消费者来说会更干净。然后只需检查每个属性的存在就足以知道它得到了哪个替代方案。
您的 Java 类似乎也设计得很糟糕。类不应该有这种类型的上下文或模式,在一个上下文中允许一个字段,但在另一个上下文中则不允许。
由于这主要是您的设计的味道,而不是序列化逻辑,因此最好的方法可能是更正您的 Java 类层次结构:
class BaseClass {
}
class SubClassWithItems {
public List<TwoDArrayItem> getItems() {
return items;
}
@JsonProperty("Json")
public void setItems(List<TwoDArrayItem> items) {
this.items = items;
}
}
class SubClassWithType {
public String getType() {
return type;
}
@JsonProperty("Json")
public void setType(String type) {
this.type = type;
}
}
这样,您的类就没有基于某些运行时状态的不同字段集。如果运行时状态正在驱动您的类包含哪些字段,那么您不会比仅使用Map.
如果你不能改变它,你就剩下自定义序列化。