Kotlinx 序列化文档
根据Kotlinx.serialization
用户定义的注释文档:
“在序列化/反序列化过程中,您自己的注释类在
SerialDescriptor
对象中可用”:
override fun encodeElement(desc: SerialDescriptor, index: Int): Boolean {
val annotations = desc.getElementAnnotations(index)
...
}
我想做的事
我需要一个@Transient
等价的,但有条件的:
- 经典方式 where :
Json.stringify(serializer, myClass)
照常工作。 - 自定义方式 where :
Json.stringify(customSerializer, myClass)
将返回通常的 json 但排除所有@MyAnnotation
-tagged 值。
这是我的代码
@SerialInfo
@Target(AnnotationTarget.PROPERTY)
annotation class CustomAnnotation
@Serializable
data class MyClass(val a: String, @CustomAnnotation val b: Int = -1)
我想构建一个自定义序列化器并实现类似
override fun encodeElement(desc: SerialDescriptor, index: Int): Boolean {
val isTaggedAsCustomAnnotation = desc.getElementAnnotations(index).any{ it is CustomAnnotation }
val myCondition = mySerializer.getMyConditionBlablabla
if(myCondition && isTaggedAsCustomAnnotation) {
encode()
}
...
}
我发现了什么
abstract class ElementValueEncoder : Encoder, CompositeEncoder {
...
open fun encodeElement(desc: SerialDescriptor, index: Int): Boolean = true
}
但我不知道如何构建自定义序列化程序,以便我可以覆盖该函数Encoder.encodeElement
。我可以在哪里访问自定义 Serializer 中的 ElementValueEncoder ?
我还在kotlinx.serialization github repo 中找到了这个示例演示。它使用TaggedEncoder
&TaggedDecoder
我可以覆盖的地方encodeTaggedValue
。但是在这里我不知道如何在序列化/反序列化过程中使用这些编码器/解码器。
最后
我在哪里可以覆盖fun encodeElement(desc: SerialDescriptor, index: Int): Boolean
,以及如何处理我自己定义的序列化注释?
谢谢 !!