Возможно ли вернуть предварительно закодированную строку JSON в методе концентратора SignalR?

В проекте MVC у меня есть метод на концентраторе, подобный этому:

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

К сожалению, SignalR (или что-то) принимает закодированную строку JSON и счастливо кодирует ее, а затем возвращает ее, поэтому браузер выглядит как LOLWTF. Есть ли способ пропустить эту вторую кодировку?

Ответ 1

Посмотрите здесь:

Мы предполагаем, что любой массив ArraySegment уже сериализуется JSON

it похоже, что что-то вроде этого может работать (обратите внимание, что я не пробовал, поэтому no promises):

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

(Вышеупомянутое работает только для PersistentConnection из-за того, что представляет собой значение - для концентраторов данные переносятся в контейнер с информацией RPC, я оставляю это только в случае использования PersistentConnection для вас)

Еще одна идея может заключаться в создании класса контейнера для строки JSON, а затем с использованием настраиваемого конвертера, который просто записывает строку as-is, а затем регистрируется как это в стартовом коде Signalr:

var serializer = new JsonSerializer();
serializer.Converters.Add(new PreserializedConverter());

GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => serializer);