使用ServiceStack.Text作为SignalR的JSON Serializer

Pha*_*o2k 8 json signalr

为了在我的应用程序层中实现一致的序列化,我想对SignalR使用相同的序列化库(ServiceStack.Text),我在其他地方使用它.

在关注SignalR的Wiki 条目以替换使用过的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

积分:

var serializer = new SignalrServiceStackJsonSerializer();
GlobalHost.DependencyResolver.Register(typeof(IJsonSerializer), () => serializer);
Run Code Online (Sandbox Code Playgroud)

不幸的是,在集成它之后,SignalR JS客户端确实获得了与默认序列化器不同的包.看起来,默认的序列化程序生成(至少对于非用户消息)JSON,其属性上限为1个字符,在用ServiceStack.Text替换后不会发生.因此,SignalR尝试访问"我"但收到"Id".我无法找到SignalR服务器端源代码的各个部分.

我做错了什么或者我是否必须创建一个更复杂的包装器来将ServiceStack.Text用作JSON序列化器?

dav*_*owl 2

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

  • 好吧,这很糟糕;)但是感谢您解决了这个问题,我将不得不看看我如何解决 ServiceStack.Text 和 JSON.Net 中的差异。 (7认同)