【问题标题】:Deserialize subclasses with Jackson by parent class field value通过父类字段值反序列化带有 Jackson 的子类
【发布时间】:2020-02-19 11:22:08
【问题描述】:

我有一个父类:

open class NetworkMessage(var type: NetworkMessageType)

还有一堆它的子类,比如

class ConnectionAcceptedResponseMessage(
    val accepted: Boolean,
    val uid: String
) : NetworkMessage(NetworkMessageType.CONNECTION_ACCEPTED)

所以每个消息类型都清楚地由父类字段值确定。有没有办法只使用注释而不使用treeNode来反序列化具体子类?

【问题讨论】:

  • NetworkMessage“知道”所有子类吗?
  • “知道”是什么意思?这个 json 对象是从 C# 客户端发送的,所以我在客户端和服务器上都创建了在同一个 json 中序列化的对象

标签: java kotlin jackson


【解决方案1】:

在Java中,你可以在父类上做这样的事情:

@JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME,
    include = JsonTypeInfo.As.EXISTING_PROPERTY,
    property = "type"
)
@JsonSubTypes({
        @JsonSubTypes.Type(value = ConnectionAcceptedResponseMessage.class, name = "CONNECTION_ACCEPTED"),
        @JsonSubTypes.Type(value = OtherResponseMessage.class, name = "OTHER")
})

我猜在 Kotlin 中这将是相似的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-05
    • 2014-10-06
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    相关资源
    最近更新 更多