为了在我的应用程序层中实现一致的序列化,我想对 SignalR 使用与其他地方相同的序列化库 (ServiceStack.Text)。
在遵循 SignalR 的 Wiki条目以替换使用的 JSON 序列化程序时,我创建了这个基本处理程序:
public class SignalrServiceStackJsonSerializer : IJsonSerializer
{
public void Serialize(object value, TextWriter writer)
{
var selfSerializer = value as IJsonWritable;
if (selfSerializer != null)
selfSerializer.WriteJson(writer);
else
JsonSerializer.SerializeToWriter(value, writer);
}
public object Parse(TextReader reader, Type targetType)
{
return JsonSerializer.DeserializeFromReader(reader, targetType);
}
}
一体化:
var serializer = new SignalrServiceStackJsonSerializer();
GlobalHost.DependencyResolver.Register(typeof(IJsonSerializer), () => serializer);
不幸的是,在集成之后,SignalR JS 客户端确实获得了与默认序列化程序不同的包。看起来,默认序列化程序生成(至少对于非用户消息)属性上限为 1 个字符的 JSON,在将其替换为 ServiceStack.Text 后不会发生这种情况。因此,SignalR 尝试访问“I”,但它收到了“Id”。我找不到 SignalR 服务器端源代码的各个部分。
我做错了什么还是必须创建一个更复杂的包装器才能将 ServiceStack.Text 用作 JSON 序列化程序?