如何获取 JS 对象并将其传回?

How to get JS object and pass it back?

我想从 Blazor 调用 JS 函数(这是工厂方法),然后将获得的对象传回给 JS(另一个函数)。

问题是 Blazor 更改了对象,所以当我打印返回对象的数据(在第一个函数中)和在第二个函数中获得的对象时,我可以看到结构不同。

我不想在Blazor中以任何方式修改或读取这个对象,只是get+pass,就这样。

更新:请阅读 KirkWoll 的评论以获得更多技术性改写。目前我将 JS 函数称为 await jsRuntime.InvokeAsync<object>(... 但它不起作用(如预期的那样)。

C# -- 网络标准 2.0。

演示和解决方法

我创建了这个简单的 Blazor Fiddle (WASM 3.1),它读取 JavaScript 对象然后将其写回。如果您在浏览器控制台中查看输出,您会看到对象在属性完好无损的情况下来回传递。

但是,该函数已从对象中剥离。那是因为对象作为 json 传递,而 json 只有属性。所以只能发送属性。

OP 还会测试返回的对象是否与存储的全局对象相同。然而,这将是错误的,因为这些是不同的实例。属性可能相同,但引用不同。

解决方法

如果要求通过引用将对象从一个 JavaScript 函数传递给另一个函数,则解决方法是创建一个 JavaScript 函数来直接执行此操作,而不将对象传递给 Blazor。基本上,只是一个触发调用的函数。解决方法包含在 fiddle.