问题标签 [kotlinx.serialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kotlin - Kotlinx序列化中根据字段值选择密封子类
有没有办法根据响应 JSON中的字段值来区分响应Successful
和响应?Failed
ok
所以,因为{"ok":true, "payload":…}
我想Successful
上课,而且为了{"ok":false, "description":…}
—— Failed
。
我知道有类似的问题——根据字段的值反序列化为密封的子类——但它使用type
字段,并且我在 JSON 中没有任何类型鉴别器(的含义不是ok
类型鉴别(尽管它可以用于可能有一些技巧))
android - 从 ByteArray 的字符串转换为字符串
我正在尝试将字符串转换为 UTF-8 并将其存储在共享首选项中,但在获取其值后,我无法将包含字节数组的字符串转换为字符串
如何从结果中获取 myString 的值?
提前致谢
kotlin - kotlinx.serialization:注入本地参数
我需要在反序列化期间向类构造函数注入本地值。例如,看下面的类。
我希望local
在序列化期间跳过该字段,并在反序列化期间用一些预定义的本地值替换。
背后的原因是我要通过网络传输模型,但是对这些模型的操作依赖于我要注入的本地上下文。
因为我还没有找到任何标准的方法来实现它,所以我决定使用上下文序列化。所以我写了序列化器:
并以这种方式使用它:
令人惊讶的是,它在 JVM 上运行良好。但是,当我将其编译为 JS 并进行测试时,我得到了TypeError: Cannot read property 'siteId' of undefined
. 这siteId
是我尝试访问的 Context 字段。
有注入本地参数的标准方法吗?我的诡计有什么问题?
json - 使用 kotlinx.serialization 在 ktor 服务器中接收 Map
我有一个运行 kotlinx.serialization 的 Ktor 服务器,因为它是 json (de)serializer 我向我的 Ktor 发送了这样一条消息:
这是一对 Int 和这个类:
但我得到这个错误
对我来说,这意味着 kotlinx.serialization 期望 map 类有不同的语法。这对我来说很奇怪。当我将类型更改为 List> 时,它会引发相同的异常,但使用 LIST 而不是 MAP。编辑:经过进一步检查,它期望在行的开头有一个 [ 而不是 { 。我的(部分)应用程序实现
发送类的android改造函数(使用GSON):
android - 使用 Kotlinx.Serialization 和 Retrofit 反序列化响应
我正在使用并且kotlinx.serialization
可能
遗漏了一些明显的东西,但我只是没有将 2 和 2 放在一起。implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.5.0")
Retrofit2
我有一个可序列化的类,其中包含另一个可序列化类的列表:
和这样的改造设置:
我有一个服务:
当我进行网络调用GetStuff
期望获得的实例时A
,我得到了这个异常:
kotlinx.serialization.SerializationException: Can't locate argument-less serializer for class A. For generic classes, such as lists, please provide serializer explicitly.
所以我想它期望我为 List 提供一个序列化程序?
我读过我应该能够使用类似的列表序列化程序,B.serializer().list
但我不确定在我的上下文中在哪里使用它,以及当我尝试将它放在任何我得到的地方时Unresolved reference: serializer
。
kotlin - 调用生成的 serializer() 方法时收到 NoClassDefFoundError
NoClassDefFoundError
尝试Foo.serializer()
在类上调用该方法时出现问题@Serializable
。
这是我的测试用例:
尝试运行代码会导致以下堆栈跟踪:
kotlin - Kotlinx 序列化器和单值域类型
我喜欢对例如 ID 使用单值类型。我如何告诉 Kotlinx 序列化器考虑常规字段而不是对象等类型?
例子:
应序列化为:
和 UserId 只是data class(val value: Int)
?
编辑:我想我可以为每个Id
类使用自定义序列化程序,但我真的不想为我的域中的每个 ID 重复这样的代码。此外,我不知道如何写一个;到目前为止,我的努力失败了。
EDIT2:这是我编写此类序列化程序的尝试:
基本上,这里写的是什么,但它不起作用:(
json - 序列化地图使用 Ktor 和 kotlinx.serialization
这是返回 LocalDates 地图的 Ktor 路线:
LocalDate 不可序列化,但是:
我已经构建了自己的序列化程序:
我可以在数据类中使用这个序列化程序,例如data class Foo(@Serializable(with=LocalDateSerializer::class)date: LocalDate
. 但我不知道如何让它与我的地图一起使用。
我尝试了几个不同的注释:
我试过用 Ktor 注册它:
无论我尝试什么,我都会得到与SerializationException
上面相同的结果。
当 kotlinx.serialization 尝试解析 LocalDate 时,如何自动应用我的序列化程序?或者,当 Ktor 尝试序列化我的地图时,我如何建议使用序列化程序?
ktor - 如何使用 Ktor 和 kotlinx 序列化获取 HttpCall 的状态码
我试图弄清楚如何检查http请求的http状态代码Ktor
我有一个像这样的简单 GET 请求,其中包含一个 HttpResponseObject,它保存服务器返回的数据以及我控制的任何错误服务器端
现在我还需要检查的是服务器是否抛出了未处理的异常或身份验证异常。在这些情况下,服务器不会返回任何内容,并且会返回状态码 500 或 401 错误。
我看到文档有你可以用这样的东西得到完整的http响应
但是如何丢失我的序列化数据回来,我找不到任何关于如何从HttpResponse
对象序列化它的示例。
有没有人有什么建议?有没有办法从我的第一个示例中获取 http 状态代码?