我有一个用Kotlin编写的android应用程序。我有很多类,对于每个类,我都使用Gson's
toJson
和fromJson
这些类的函数。例如:
class A{
fun toJson():String {
return Gson().toJson(this)
}
fun fromJson(jsonString:String):A{
return Gson().fromJson(jsonString, A::class)
}
}
我还有另一堂课B
:
class B{
fun toJson():String {
return Gson().toJson(this)
}
fun fromJson(jsonString:String):B{
return Gson().fromJson(jsonString, B::class)
}
}
我使用的方法是创建该类的实例,然后在另一个类中调用该方法(注意:我正在创建该类的实例(class A
):
val a = A()
a.toJson()
但是我现在正在尝试将其转换为kotlin跨平台项目,但不确定如何在kotlin跨平台中进行to
和from
json转换。
我尝试创建期望函数,例如:
expect fun toJsonClassA():String
expect fun fromJsonClassA(jsonString: String): A
class A{
}
,然后像这样实现它们的实际实现:
actual fun toJsonClassA(): String {
return Gson().toJson(A::class.java)
}
在上述特定于平台的实现中,我无法使用类名的实例调用toJsonClassA
或fromJsonClassA
函数。
这行不通:
val a = A()
a.toJsonClassA()
对于我如何在Kotlin Multiplatform中实现Json序列化和反序列化的任何帮助或建议,将深表感谢。
答案 0 :(得分:0)
回答您的问题。您需要一个多平台json序列化程序(而不是GSon coz仅用于jvm),目前我只知道kotlinx.serialization
。有了它,您的代码应该看起来像这样
@Serializable
class A {
fun toJson() = Json.stringify(A.serializer(),this)
companion object {
fun fromJson(json: String) = Json.parse(A.serializer(),json)
}
}
虽然可行,但是您不需要toJson
和fromJson
方法。因为当你有一个像
@Serializable
class B {}
val b = B()
kotlinx.serialization
Json
,Json.stringify(B.serializer(),b)
Json
解析为kotlin对象,请Json.parse(B.serializer(),"{}")