【发布时间】:2014-12-05 17:05:56
【问题描述】:
所以我可以发送简单的对象,比如字符串,这没问题。我还可以将相同的字典发送到我的 javascript 客户端。但是,我似乎无法让我的 C# 客户端接受它。我假设这是因为在 javascript 客户端中不需要指定发送的类型,但在 C# 中需要指定。
这是客户端设置
connection = new HubConnection(ServerURI);
hubProxy = connection.CreateHubProxy("ControllerHub");
hubProxy.On<Dictionary<Tuple<string, string>, RequestEntry>>("ReceiveTickerStateData", overviewDictionary => receiveTickerStateData(overviewDictionary));
connection.Start().Wait();
这是被触发发送字典的服务器代码,但客户端从未收到它。
public void GetTickerStateData()
{
Clients.Caller.ReceiveTickerStateData(DealTickerState.Instance.GetRequestDict);
}
感谢任何见解或想法。谢谢!
------------添加
进一步的测试表明,我使用元组 (string, string) 作为字典的键。显然 JSON 反序列化器不知道如何处理这个问题。给我错误:
无法将字符串(DEFAULT, IDCO) 转换为字典键类型
System.Tuple`2[System.String,System.String]。创建一个类型转换器 从字符串转换为键类型对象。路径'['(默认, IDCO)']',第 1 行,第 19 位。
我通过手动序列化和发送字符串得到了这个。
我尝试发送一个只有一个字符串作为键的字典,它既可以作为序列化字符串,也可以按原样工作。 (即signalR自动序列化)
所以现在决定,我要创建类型转换器吗?还是我使用更简单的有效收集结构发送数据。
【问题讨论】:
-
您可以将
RequestEntry类添加到您的问题中吗?它应该在客户端和服务器上具有相同的实现。您还可以添加任何内容traced by the SignalR client吗?
标签: c# asp.net .net signalr signalr.client