javascript - 如何将 JavaScript 对象转换为 Kotlin 类?

标签 javascript class kotlin kotlin-js-interop kotlin-js

我想要将 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/

相关文章:

javascript - 向上滚动到顶部时堆叠两个 div

javascript - HTML5 Canvas 实时绘图

JavaScript "arguments"- 传递带有其他参数的函数

android - 在 Mockito 中使用访问器模拟 kotlin 属性

javascript - 我怎样才能改进这个Javascript代码,让它忽略图像中的链接

python - 类 __init__ 属性,DRY 与 IDE 功能

python - 仅在对象实例的生命周期内保持 Python 解释器事件

java - Java 中类的作用

android - 具有 ArrayList 数据类型的 Hashmap(Kotlin)?

android - 如何在 Kotlin 中使用 get() 定义类类型属性