我目前正在为实验性的 KXS-properties 序列化后端苦苦挣扎,主要是因为两个原因:
- 我找不到任何文档(我认为没有)
- KXS-properties 仅包括一个串行器/解串器,但没有编码器/解码器
框架提供的端点本质上是Map<String, Any>
,但映射是平面的,并且键已经具有通常的点分隔属性语法。因此,我必须采取的步骤是将地图编码为可打印到.properties
文件的单个字符串,并将文件中的单个字符串解码.properties
到地图中。我通常遵循来自https://docs.oracle.com/javase/10/docs/api/java/util/Properties.html#load(java.io.Reader)的属性格式规范,它并不像有人可能会想。
问题是我不能java.util.Properties
立即使用,因为 KXS 是多平台的,当我将它限制为 JVM 时,它会有点扼杀它的目的,因为我使用java.util.Properties
. 如果我要使用它,解决方案将非常简单,如下所示:https ://gist.github.com/RaphaelTarita/748e02c06574b20c25ab96c87235096d
所以我正在尝试实现我自己的编码器/解码器,遵循kotlinx.serialization.json.Json.kt
. 虽然这很乏味,但到目前为止进展顺利,但现在我偶然发现了一个新问题:
据我所知(我不确定,因为没有文档),地图只包含原语(或原语等价物,因为 Kotlin 并没有真正的原语)。KSerializer
我怀疑这是因为当您为 KXS 前端编写自己的s 时,您可以通过调用接口的encodeXXX()
函数来指定编码为任何原语Encoder
。现在的问题是:当我尝试解码到应该包含原语的地图时,我什至怎么知道模型类需要哪些原语?
我曾经用 Java 编写了自己的序列化器/反序列化器来了解这个主题,但在那个实现中,后端与前端的耦合更加紧密,因此我可以从模型类中查询预期的原始类型后端。但在我的情况下,我无权访问模型类,也不知道如何检索预期的类型。
如您所见,我尝试了多种方法,但都没有立即奏效。如果你能帮助我让这些工作中的任何一个工作,那将非常感激
谢谢!