json - 如何在 kotlin + klaxon 上序列化到外部标记的枚举(多态类)?
问题描述
我试图序列化以匹配在Rust + Serde中您使用 klaxon 执行“外部标记”枚举的方式。
这是我对 Kotlin 的定义:
@TypeFor(field = "type", adapter = QueryTypeAdapter::class)
open class Query(val type: QueryType)
data class StartTravel(val from:Coordinates, val to:Coordinates): Query(QueryType.StartTravel)
class SearchingDriver: Query(QueryType.SearchDriver)
data class Fail(val error:JsonError): Query(QueryType.Fail)
class QueryTypeAdapter: TypeAdapter<Query> {
override fun classFor(type: Any): KClass<out Query> = when(type as QueryType) {
QueryType.StartTravel-> StartTravel::class
QueryType.SearchDriver -> SearchingDriver::class
QueryType.Fail -> Fail::class
}
}
我需要这个反序列化为:
{"StartTravel":{"from":{"lat":0.0,"long":0.0},"to":{"lat":0.0,"long":0.0}}}
但现在是:
{"from" : {"lat" : 0.0, "long" : 0.0}, "to" : {"lat" : 0.0, "long" : 0.0}, "type" : "StartTravel"}
PD:关于 Rust 的定义(带有可运行测试):
#[derive(Debug, Deserialize, Serialize)]
pub struct JsonError {
pub kind: String,
pub message: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct Coordinates {
lat: f64,
long: f64,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct StartTravel {
from: Coordinates,
to: Coordinates,
}
#[derive(Debug, Deserialize, Serialize)]
pub enum QueryType {
StartTravel(StartTravel),
SearchingDriver,
Fail(JsonError),
}
解决方案
推荐阅读
- python - 将几个numpy数组存储为jpg图像python时丢失文件
- amazon-web-services - 如何将文档上传到签名的 AWS S3?什么是桶和对象?
- android - 自定义 url 方案在 Android 中不起作用反应原生
- django - django 从视图中设置模板 url
- sql - 使用子查询和标准值插入数据
- django - 网站间歇性加载失败 - DNS 有问题?
- python-3.x - 事件后触发周期性 celery 任务
- javascript - 单击按钮odoo时如何调用该函数
- angular - Angular5.x 用于长时间运行的服务器进程的进度报告
- ruby - 带有粉碎的Docker ruby容器 - 加载错误