Какой тип объекта DotNet.invokeMethod передает в метод С#?

Я использую Blazor (3.0.0-preview4) и пытаюсь передать объект из javascript через DotNet.invokeMethod. Я тестировал этот способ, и он успешно передает простые типы (строки, int). Но если я передаю объект JS, я получаю странный тип объекта Какой тип объекта DotNet.invokeMethod передает в метод С#? Могу записать в Console.WriteLine, похоже на JSON, но не на string.Какой тип объекта DotNet.invokeMethod передает в метод С#?

Так что я ничего не могу с этим сделать, я даже не могу его разобрать, и нет никакой информации о сборке 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));
  };
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 591
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

DotNet.InvokeMethod отправит строку JSON, как вы видите в журнале консоли WASM, в ваш метод JSInvokable на странице Blazor .razor.

Чтобы десериализовать его на странице blazor, используйте

[JSInvokable]
public static void SetPlayerState(string msg)
{
    var deserialized = Microsoft.JSInterop.Json.Deserialize<myobject>(msg);
}

Спасибо за ответ, но это не строка JSON, так как args[0].GetType().Name возвращает не строку и не объект. Я заставил это работать с помощью JsonConvert.DeserializeObject<PlayerState>(args[0].ToString(‌​)) (я использовал json.net, так как библиотека json от Microsoft не может конвертировать такие типы, как int -> uint и т. д.)

FoxPro 02.05.2019 18:22

И это единственный обходной путь преобразования этого странного типа

FoxPro 02.05.2019 18:23

JSON.parse в вашем JS создаст объект из вашей строки параметра "json", если это строка json - вы должны отправить только строку, если хотите получить только строку в JSInvokable. Вы можете использовать JSON.stringify для преобразования вашего объекта в строку перед отправкой в ​​JSInvokable. По крайней мере, тогда вы будете знать, что получите строку.

Laurence73 02.05.2019 18:51

да, просто хочу уменьшить (счетчик десериализации для повышения производительности.

FoxPro 02.05.2019 18:57
Ответ принят как подходящий

Я обнаружил, что blazor использует эта библиотека

Спасибо этот ответ
Связанная проблема

Другие вопросы по теме