为了在我的应用程序层中实现一致的序列化,我想对 SignalR 使用与我在其他地方使用的相同的序列化库 (ServiceStack.Text)。
在关注 SignalR 的 Wiki 时entry https://github.com/SignalR/SignalR/wiki/Extensibility#replacing-the-ijsonserializer为了替换使用的 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 序列化器?
我懒得去尝试。我们对 JSON.NET 有深度依赖,甚至在下一个版本中删除了这种可扩展性。对不起。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)