【问题标题】:Is it possible to return a pre-encoded JSON string in a SignalR hub method?是否可以在 SignalR 集线器方法中返回预编码的 JSON 字符串?
【发布时间】:2015-02-16 18:01:36
【问题描述】:
在一个 MVC 项目中,我在集线器上有一个类似这样的方法:
public string Foo() { return DoCrazyThingThatReturnsJson(); }
不幸的是,SignalR(或其他东西)接受编码的 JSON 字符串并愉快地对其进行编码,然后返回它,所以浏览器就像 LOLWTF。有没有办法跳过第二次编码?
【问题讨论】:
标签:
c#
json
json.net
signalr
signalr-hub
【解决方案1】:
看着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);