javascript - Blazor javascript interop - 从 js 到 .NET 的对象转换

标签 javascript .net json interop blazor

我正在使用 Blazor javascript 互操作(js 调用 .NET),如

//js
dotNetObjRef.invokeMethodAsync("DotNetMethod", jsObject);
---------------------------------------------------------
//C#
[JSInvokable]
public void DotNetMethod(object jsObject)
{
    Console.WriteLine($"jsObject type is {jsObject.GetType()}");
}

在浏览器控制台中,我得到:

'jsObject type is SimpleJson.JsonObject'

现在我想将 jsObject 转换为具体的 SimpleJson.JsonObject,如

[JSInvokable]
public void DotNetMethod(object jsObject)
{
    JsonObject jsObject = (JsonObject)jsObject; //error
}

但是我所有使用 SimpleJson 的 C# 社区实现(如 https://github.com/facebook-csharp-sdk/simple-json)的试验都失败了,提示转换无效。

作为解决方法,我遍历字符串:

//js
dotNetObjRef.invokeMethodAsync("DotNetMethod", JSON.stringify(jsObject));
.
//C#
[JSInvokable]
public void DotNetMethod(string jsObjectJSON)
{
    JsonObject jsObject = SimpleJson.DeserializeObject<JsonObject>(jsObjectJSON);
}

有谁知道是否可以(以及如何)直接使用接收到的 jsObject,即避免序列化/反序列化(并且没有反射)?

最佳答案

为什么不直接接收 JSON,而是接收先前定义的对象?

let x = {
    "data": "test",
    "moreData": "another test"
}

dotnetHelper.invokeMethodAsync('selectionChanged', x);

然后

//C#
public class InteropHelper
{
    public event Action OnSelectionChanged;

    [JSInvokable]
    public void selectionChanged(TestItem data)
    {
        OnSelectionChanged?.Invoke();
    }

    class TestItem
    {
        public string data { get; set; }
        public string moreData { get; set; }
    }
}

Blazor 会自动知道 JSON 中的哪些字段与 TestItem 中的哪些字段对应。

关于javascript - Blazor javascript interop - 从 js 到 .NET 的对象转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56388341/

相关文章:

javascript - React 组件的延迟渲染

.net - 设置页面标题不起作用

c# - 您必须添加对程序集的引用…而无需web.config文件

android - Intent 值分别形成包含多个值的 ListView 行

javascript - 如何在 Javascript 中更改 html 中动态 div 标签的 div 样式宽度?

javascript - 为什么我的代码没有生成 "-"的数组,并在所选列处生成 "X"?

javascript - 为什么 Promise 记录数据但返回相同数据的未定义

.net - WPF 数据网格文本列中的绑定(bind)

ios - Firebase:从嵌套的 Childs 中检索信息 (Swift 3)

json - ExtJS 5.1 不会向我的服务器发送嵌套的 JSON 对象