为了在我的应用程序层中实现一致的序列化,我想使用与其他地方使用的SignalR相同的序列化库(ServiceStack.Text).
在遵循SignalR的Wiki entry替换使用的JSON Serializer时,我创建了这个基本的处理程序:
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客户端确实获得了与默认序列化器不同的包.看起来,默认的序列化程序生成(至少对于非用户消息)JSON,其属性上限为1个字符,在用ServiceStack.Text替换后不会发生.因此,SignalR尝试访问“我”但它收到“Id”.我无法找到SignalR服务器端源代码的各个部分.
我做错了什么或者我是否必须创建一个更复杂的包装器来将ServiceStack.Text用作JSON序列化器?
解决方法
我不打扰尝试.我们对JSON.NET有很强的依赖性,我们甚至在下一个版本中删除了这种可扩展性.抱歉.