是否可以在SignalR集线器方法中返回预编码的JSON字符串?

在MVC项目中,我在类似于此的集线器上有一个方法:

public string Foo() { return DoCrazyThingThatReturnsJson(); } 

不幸的是,SignalR(或其他东西)接受编码的JSON字符串并愉快地对其进行编码,然后将其返回,因此浏览器就像LOLWTF。 有没有办法跳过第二次编码?

在这看 :

我们假设任何ArraySegment都已​​经过JSON序列化

看起来像这样的东西可能有效 (注意我没有尝试过,所以没有承诺):

 string jsonString = ...; // your serialized data var jsonBytes = new ArraySegment(Encoding.UTF8.GetBytes(jsonString)); Clients.Caller.sendJson(jsonBytes); 

(上面只适用于PersistentConnection,因为它构成了一个值 – 对于集线器,数据被包装在一个带有RPC信息的容器中;我只是留下这个,以防万一使用PersistentConnection是一个选项)

另一个想法可能是为JSON字符串创建容器类,然后使用自定义转换器简单地按字符串写入字符串,然后在Signalr启动代码中进行如下注册:

 var serializer = new JsonSerializer(); serializer.Converters.Add(new PreserializedConverter()); GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => serializer);