我正在使用Blazor JavaScript互操作(调用.NET的js),就像这样:
现在我想将jsObject转换为具体的SimpleJson.JsonObject,例如:
//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
}
但是我使用C#社区实现的SimpleJson(如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,避免序列化/反序列化(且不使用反射)吗?