Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript DotNet.invokeMethod在c#方法中传递什么类型的对象?_Javascript_C#_Asp.net Core_.net Core_Blazor - Fatal编程技术网

Javascript DotNet.invokeMethod在c#方法中传递什么类型的对象?

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.

我正在使用Blazor(3.0.0-preview4)并试图通过
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);
}