【问题标题】:Serializing/deserializing derived objects in SignalRSignalR中的序列化/反序列化派生对象
【发布时间】:2013-05-19 15:41:50
【问题描述】:

我将 SignalR 1.1 与 .NET 客户端一起使用。 我的集线器中有一个方法,它接受 BaseMessage 类的对象并将其广播给所有客户端:

public void SendMessage(BaseMessage message)
{
    Clients.All.BroadCastMessage(message);
}

客户端会将派生消息传递给此方法:

_hub.Invoke("SendMessage", new ErrorMessage("Some Error")).Wait();

客户端只有一个消息处理程序:

_hub.On<BaseMessage>("BroadCastMessage", OnMessageReceived);

我在应用程序启动时指定了 TypeNameHandling.All 序列化程序设置:

var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All};
var serializer = new JsonNetSerializer(settings);
GlobalHost.DependencyResolver.Register(typeof(IJsonSerializer), () => serializer);

但是当客户端发送派生消息时,服务器会收到基本消息。

我应该如何配置序列化程序才能接收派生消息?

注意:我可以手动进行序列化/反序列化并将字符串传递给服务器,但这会导致双重序列化。

【问题讨论】:

    标签: json.net signalr


    【解决方案1】:

    SignalR 不支持此方案,因为它要求您的 JSON 有效负载包含有关派生类型和程序集的信息。请参阅此sample。 在您的有效负载中添加类型信息不会很好地与浏览器配合使用。我建议您创建单独的 hub 方法来处理您的每个派生类型。

    【讨论】:

      猜你喜欢
      • 2012-05-25
      • 1970-01-01
      • 2013-10-10
      • 2022-01-07
      • 2012-03-31
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多