Javascript DotNet.invokeMethod在c#方法中传递什么类型的对象?
我正在使用Blazor(3.0.0-preview4)并试图通过Javascript DotNet.invokeMethod在c#方法中传递什么类型的对象?,javascript,c#,asp.net-core,.net-core,blazor,Javascript,C#,Asp.net Core,.net Core,Blazor,我正在使用Blazor(3.0.0-preview4)并试图通过DotNet.invokeMethod从javascript传递对象。我以这种方式进行了测试,它成功地传递了简单类型(字符串、int)。但如果我传递JS对象,我会得到奇怪的对象类型 我可以将它写入Console.WriteLine,它看起来像JSON,但不是字符串 所以我不能用这个做任何事情,我甚至不能解析它,也没有关于微软SimpleJson汇编的信息。我如何处理这种类型的问题 提前谢谢 代码示例 布拉佐: JS: DotNet.
DotNet.invokeMethod
从javascript传递对象。我以这种方式进行了测试,它成功地传递了简单类型(字符串、int)。但如果我传递JS对象,我会得到奇怪的对象类型
我可以将它写入Console.WriteLine,它看起来像JSON,但不是字符串
所以我不能用这个做任何事情,我甚至不能解析它,也没有关于微软SimpleJson汇编的信息。我如何处理这种类型的问题
提前谢谢
代码示例
布拉佐:
JS:
DotNet.InvokeMethod将向Blazor.razor页面中的JSInvokable方法发送一个JSON字符串,如您在WASM控制台日志中看到的 要在blazor页面中对其进行反序列化,请使用
[JSInvokable]
public static void SetPlayerState(string msg)
{
var deserialized = Microsoft.JSInterop.Json.Deserialize<myobject>(msg);
}
[JSInvokable]
公共静态无效SetPlayerState(字符串消息)
{
var deserialized=Microsoft.JSInterop.Json.Deserialize(msg);
}
我发现blazor使用
感谢感谢您的回复,但它不是作为args[0]的JSON字符串。GetType()。Name返回的不是字符串,也不是对象。我通过
JsonConvert.DeserializeObject(args[0].ToString())
(我使用json.net作为microsoft的json库,无法转换int->uint等类型),它唯一的解决办法是在JS中转换这种奇怪的类型json.parse将从参数“json”创建一个对象字符串(如果它是json字符串)-如果您只想在JSInvokable中接收字符串,则应该只发送字符串。在发送到JSInvokable之前,可以使用JSON.stringify将对象转换为字符串。至少那时您会知道您将收到一个字符串。是的,只是想减少(反)序列化的计数以提高性能。
window.cInvoke = (methodName, json) => {
DotNet.invokeMethod("ui", methodName, JSON.parse(json));
};
[JSInvokable]
public static void SetPlayerState(string msg)
{
var deserialized = Microsoft.JSInterop.Json.Deserialize<myobject>(msg);
}