是否可以在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);