Это то, что отправляется с сервера клиенту:
public class BattleHub : Hub
{
public override async Task OnConnectedAsync()
{
await Clients.Client(Context.ConnectionId).SendAsync("ConfigurationInfo",
new Dictionary<string, string> { { "WtF", "WtF" } });
await base.OnConnectedAsync();
}
}
Это то, что получает клиент:
{"wtF":"WtF"}
Как свидетельствует следующий код клиента:
const battle_connection = new signalR.HubConnectionBuilder().withUrl("/battlehub").build()
battle_connection.on("ConfigurationInfo", (bigDict) => {
window.alert(JSON.stringify(bigDict))
})
Обратите внимание на изменение регистра в первой букве ключа словаря?«WtF» должен был быть отправлен, но вместо него отправлено «wtF».
Почему это происходит?Есть ли способ предотвратить это?
Любопытно, что это происходит только с ключами словаря: как видите, значения остаются неизменными.Кроме того, отправка только одной строки, не заключенной в словарь, не приводит к тому, что первая буква переводится в нижний регистр.List<string>
также отправляется правильно.
Регистр всех букв всех ключей здесь действительно имеет значение, поэтому он делает приложение неправильным, если какая-либо из них принудительно преобразуется в нижний регистр!Хотя, конечно, мы можем придумать много более или менее безобразных способов обойти эту проблему, есть ли способ отключить это преобразование в сериализаторе SignalR?
ASP .NET Core 2.1