Я использую Blazor (3.0.0-preview4) и пытаюсь передать объект из javascript через DotNet.invokeMethod. Я тестировал этот способ, и он успешно передает простые типы (строки, int). Но если я передаю объект JS, я получаю странный тип объекта
Могу записать в Console.WriteLine, похоже на JSON, но не на string.
Так что я ничего не могу с этим сделать, я даже не могу его разобрать, и нет никакой информации о сборке SimpleJson от Microsoft. Как я могу бороться с этим типом?
Заранее спасибо.
Пример кода Блейзер:
[JSInvokable]
public static void SetPlayerState(object[] args)
{
Console.WriteLine(args[0]);
Console.WriteLine(args[0].GetType().Name);
}
JS:
window.cInvoke = (methodName, json) => {
DotNet.invokeMethod("ui", methodName, JSON.parse(json));
};



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


DotNet.InvokeMethod отправит строку JSON, как вы видите в журнале консоли WASM, в ваш метод JSInvokable на странице Blazor .razor.
Чтобы десериализовать его на странице blazor, используйте
[JSInvokable]
public static void SetPlayerState(string msg)
{
var deserialized = Microsoft.JSInterop.Json.Deserialize<myobject>(msg);
}
И это единственный обходной путь преобразования этого странного типа
JSON.parse в вашем JS создаст объект из вашей строки параметра "json", если это строка json - вы должны отправить только строку, если хотите получить только строку в JSInvokable. Вы можете использовать JSON.stringify для преобразования вашего объекта в строку перед отправкой в JSInvokable. По крайней мере, тогда вы будете знать, что получите строку.
да, просто хочу уменьшить (счетчик десериализации для повышения производительности.
Я обнаружил, что blazor использует эта библиотека
Спасибо этот ответ
Связанная проблема
Спасибо за ответ, но это не строка JSON, так как args[0].GetType().Name возвращает не строку и не объект. Я заставил это работать с помощью
JsonConvert.DeserializeObject<PlayerState>(args[0].ToString())(я использовал json.net, так как библиотека json от Microsoft не может конвертировать такие типы, как int -> uint и т. д.)