我目前正在开发一个支持SignalR的Visual Studio VSIX扩展,我遇到了一个奇怪的问题。
这是强类型的集线器代码:
public interface ISyncClient
{
void SelectionChanged(SelectionChangedMessage message);
}
public class SyncHub: Hub<ISyncClient>
{
public void SelectionChanged(SelectionChangedMessage message)
{
Clients.Others.SelectionChanged(message);
}
}
这是消息类:
public class SelectionChangedMessage
{
[JsonProperty("ss")]
public int SelectionStart { get; set; }
[JsonProperty("se")]
public int SelectionEnd { get; set; }
}
集线器和客户端正常通信。在客户端,我有以下代码:
proxy.On("selectionChanged", m => { var selectionStart = m.ss; });
proxy.On<SelectionChangedMessage>("selectionChanged", m => { var selectionStart = m.SelectionStart; });
第一个处理程序接收动态对象,并且存在ss属性(SelectionStart)。 但是,第二个处理程序的SelectionStart属性具有默认值。
通过集线器传递的消息的值已设置,但只要客户端尝试将消息反序列化为具体的消息类型,它就会失败。
客户端无法正确反序列化JsonProperty属性。
客户端和服务器正在使用Newtonsoft.Json 9.0.1运行SignalR 2.2.1。
相同的代码适用于在ASP.NET Core上运行的aspnetmaster的SignalR 2.2.1客户端和SignalR 0.1.0服务器。
还有其他人遇到过类似问题吗?
修改
我做了一个干净的重建并确保所有项目都使用相同版本的Newtonsoft.Json。我还重置了Visual Studio实例,所有实例都开始工作。
答案 0 :(得分:0)
我做了一个干净的重建并确保所有项目都使用相同版本的Newtonsoft.Json。我还重置了Visual Studio实例,所有实例都开始工作。