我为Value
数据类下的json字段CustomAttribute
创建了一个密封的类。该字段可以返回String
或Array of Strings
。
我们如何从json反序列化这个密封的类?
data class CustomAttribute (
val attributeCode: String,
val value: Value
)
sealed class Value {
class StringArrayValue(val value: List<String>) : Value()
class StringValue(val value: String) : Value()
}
最佳答案
过去,我成功地完成了密封类的序列化和反序列化,并且免责声明使用Jackson而不是Gson作为我的序列化引擎。
我的密封类已定义为:
@JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS, include = JsonTypeInfo.As.PROPERTY, visible = true)
sealed class FlexibleResponseModel
class SnapshotResponse(val collection: List<EntityModel>): FlexibleResponseModel()
class DifferentialResponse(val collection: List<EntityModel>): FlexibleResponseModel()
class EventDrivenResponse(val collection: List<EntityEventModel>): FlexibleResponseModel()
class ErrorResponse(val error: String): FlexibleResponseModel()
使用所使用的注释,Jackson实例不需要进一步配置就可以正确地序列化和反序列化此密封类的实例,前提是通信的双方都具有该密封类的统一定义。
虽然我知道
JsonTypeInfo
是Jackson特定的注释,但如果必须使用此功能,也许您可以考虑从Gson切换-或者您可以找到Gson的等效配置,该配置还将在序列化数据中包含类标识符。
关于json - 使用Kotlin中的Gson在数据类中序列化Sealed类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60260081/