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

时间:2015-02-16 18:01:36

标签: c# json json.net signalr signalr-hub

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

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

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

1 个答案:

答案 0 :(得分:0)

查看this here

  

我们假设任何ArraySegment已经是JSON序列化

seems like something like this may work(请注意,我没有尝试过,所以没有承诺):

string jsonString = ...; // your serialized data
var jsonBytes = new ArraySegment<byte>(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);