SignalR Typenamehandling

Я пытаюсь заставить SignalR работать с пользовательскими JsonSerializerSettings для его полезной нагрузки, в частности, я пытаюсь установитьTypeNameHandling = TypeNameHandling.Auto.

Проблема заключается в том, что SignalR использует настройки вhubConnection.JsonSerializer а такжеGlobalHost.DependencyResolver.Resolve<JsonSerializer>() для его внутренних структур данных, который затем вызывает все виды хаоса (внутренний сервер падает, когда я устанавливаюTypeNameHandling.All как самый грубый пример, но сTypeNameHandling.Auto У меня тоже проблемы, особенно когдаIProgress<> обратные вызовы участвуют).

Есть ли обходной путь или я просто делаю это неправильно?

Пример кода для демонстрации:

Сервер:

class Program
{
    static void Main(string[] args)
    {
        using (WebApp.Start("http://localhost:8080"))
        {
            Console.ReadLine();
        }
    }
}

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var hubConfig = new HubConfiguration()
        {
            EnableDetailedErrors = true
        };
        GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), ConverterSettings.GetSerializer);
        app.MapSignalR(hubConfig);
    }
}

public interface IFoo
{
    string Val { get; set; }
}
public class Foo : IFoo
{
    public string Val { get; set; }
}

public class MyHub : Hub
{
    public IFoo Send()
    {
        return new Foo { Val = "Hello World" };
    }
}

Клиент:

class Program
{
    static void Main(string[] args)
    {
        Task.Run(async () => await Start()).Wait();
    }

    public static async Task Start()
    {
        var hubConnection = new HubConnection("http://localhost:8080");
        hubConnection.JsonSerializer = ConverterSettings.GetSerializer();
        var proxy = hubConnection.CreateHubProxy("MyHub");
        await hubConnection.Start();
        var result = await proxy.Invoke<IFoo>("Send");
        Console.WriteLine(result.GetType());
    }

Общий:

public static class ConverterSettings
{
    public static JsonSerializer GetSerializer()
    {
        return JsonSerializer.Create(new JsonSerializerSettings()
        {
            TypeNameHandling = TypeNameHandling.All
        });
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос