首页 > 解决方案 > Blazor WebAssembly:将 Float32Array 从 javascript 发送到 .NET

问题描述

这是我的 JS:

window.testSendFloatArray = (obj) => {

    var iterable = function* () { yield* [1, 2, 3, 4, 5, 6]; }();
    var float32 = new Float32Array(iterable); 

    obj.invokeMethodAsync('SendFloatArray', float32);
}

这是 C#:

[JSInvokable]
public Task SendFloatArray(JsonElement wtf)
{
    return Task.CompletedTask;
}

这就是我testSendFloatArray从 C# 调用的方式:

await JSRuntime.InvokeVoidAsync("testSendFloatArray", DotNetObjectReference.Create(this));

我在所有地方都设置了断点,并且一切都正确连接,但是当SendFloatArray被调用时,我不知道该怎么处理wtf. 我知道它是 a 的唯一原因JsonElement是因为我最初拥有它是 typeobject并在其wtf.GetType().Name上做了 a。

当我用它序列化值时,JsonSerializer.Serialize(wtf)它返回:

{"0":1,"1":2,"2":3,"3":4,"4":5,"5":6}

玩了一个小时后,我发现我可以调用它EnumerateObjectEnumerateArray失败):

[JSInvokable]
public Task SendFloatArray(JsonElement wtf)
{
    var myArray = wtf.EnumerateObject().Select(x => x.Value.GetDouble()).ToArray();

    return Task.CompletedTask;
}

但是必须有更好的方法来做到这一点,对吗?如何从 Javascript 中干净地获取 C# 程序集的原语数组?

标签: c#blazor-client-sideblazor-webassembly

解决方案


推荐阅读