Realm任何 KSerializer
RealmAny 的KSerializer实现。 序列化作为特定的映射结构完成,该结构表示具有所有可能值类型的联合类型:
realmAny:
type: [INT, BOOL, STRING, BINARY, TIMESTAMP, FLOAT, DOUBLE, DECIMAL128, OBJECT_ID, UUID, OBJECT]
int: Long?
bool: Boolean?
string: String?
binary: ByteArray?
instant: RealmInstant?
float: Float?
double: Double?
decimal128: Decimal128?
objectId: ObjectId?
uuid: RealmUUID?
realmObject: RealmObject?
内容已复制到剪贴板
反序列化是使用非托管RealmAny完成的。
必须按属性注册序列化器:
class Example : RealmObject {
@Serializable(RealmAnyKSerializer::class)
var myInstant: RealmAny = RealmAny.create("hello world")
}
内容已复制到剪贴板
或按文件:
@file:UseSerializers(RealmAnyKSerializer::class)
class Example : RealmObject {
var myInstant: RealmAny = RealmAny.create("hello world")
}
内容已复制到剪贴板
包含序列化的 RealmAny 实例的序列 化 需要一个将此类对象映射到多态 RealmObject 接口的 SerializersModule :
val json = Json {
serializersModule = SerializersModule {
polymorphic(RealmObject::class) {
subclass(SerializableSample::class)
}
}
}
内容已复制到剪贴板
将以下代码片段添加到 Kotlin 文件中,可以方便地将使用 Realm 数据类型的任何字段注册到相应的序列化器:
@file:UseSerializers(
RealmListKSerializer::class,
RealmSetKSerializer::class,
RealmAnyKSerializer::class,
RealmInstantKSerializer::class,
MutableRealmIntKSerializer::class,
RealmUUIDKSerializer::class
)
内容已复制到剪贴板
所有 Realm 数据类型的序列化器都可以在io.realm.kotlin.serializers中找到。