【问题标题】: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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      相关资源
      最近更新 更多