8

为了在我的应用程序层中实现一致的序列化,我想对 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 序列化程序?

4

1 回答 1

2

我不会费心去尝试。我们对 JSON.NET 有很深的依赖,我们甚至在下一个版本中删除了这种可扩展性。对不起。

于 2013-04-25T16:11:06.687 回答