我想要将 JavaScript 对象加载到 Kotlin 类中。 作为安全检查,我需要验证 Kotlin 对象实际上是我创建的类,因为某些 JavaScript 代码部分不是我的设计。 我需要 JavaScript 才能正确返回,但无法验证 Kotlin 类。
例如
JavaScript 对象
<script id="myJS">
function MyClass(id, name){
var obj = {};
obj.id = id;
obj.name = name;
return obj;
}
var myClass = MyClass(0, "name_0");
</script>
Kotlin 类
class MyClass(
val id: Int,
val name: String
)
我使用此 Kotlin 代码在 Kotlin 上获取 JavaScript 对象。
val myJS: dynamic = document.getElementById("myJS")
val myClass: MyClass = JSON.parse<MyClass>(JSON.stringify(myJS.myClass))//get JavaScript object
println(myClass.id)//success output "0"
println(myClass.name)//success output "name_0"
println(myClass is MyClass)//but check class this output "false"
如何验证 JavaScript 对象是创建的 Kotlin 类?
最佳答案
使用 kotlinx.serialization 中的 JSON.parse
库而不是 Kotlin/JS 标准库中的 JSON.parse
。
JSON来自 Kotlin 标准库只是围绕 JavaScript 的一个 View JSON object 。因此 JSON.parse
创建常规 JS 对象,而无需任何有关 Kotlin 类型的信息。
与 external 一起使用就可以了无法进行类型检查的类。但你的 MyClass
是一个普通的类。
从常规 Kotlin 类构造的对象具有特殊的元数据,这对于类型检查 myClass is MyClass
和反射 myClass::class == MyClass::class
至关重要。和kotlinx.serialization库创建这些全功能的 Kotlin 对象。
关于javascript - 如何将 JavaScript 对象转换为 Kotlin 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52341363/