Blazor javascript interop - преобразование объектов из js в .NET - PullRequest
2 голосов
/ 31 мая 2019

Я использую Blazor javascript interop (вызов 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 напрямую, т. Е. Избежать сериализации / десериализации (и без отражения)?

...