Я хотел бы знать, есть ли способ настроить SignalR, чтобы клиент работал в объектах возврата центра с помощью верблюжьего случая.
Спасибо.
Я хотел бы знать, есть ли способ настроить SignalR, чтобы клиент работал в объектах возврата центра с помощью верблюжьего случая.
Спасибо.
Сверните свой собственный Conttract resolver, как
public class SignalRContractResolver : IContractResolver
{
private readonly Assembly assembly;
private readonly IContractResolver camelCaseContractResolver;
private readonly IContractResolver defaultContractSerializer;
public SignalRContractResolver()
{
defaultContractSerializer = new DefaultContractResolver();
camelCaseContractResolver = new CamelCasePropertyNamesContractResolver();
assembly = typeof(Connection).Assembly;
}
public JsonContract ResolveContract(Type type)
{
if (type.Assembly.Equals(assembly))
{
return defaultContractSerializer.ResolveContract(type);
}
return camelCaseContractResolver.ResolveContract(type);
}
}
Зарегистрируйте его как
var settings = new JsonSerializerSettings();
settings.ContractResolver = new SignalRContractResolver();
var serializer = JsonSerializer.Create(settings);
GlobalHost.DependencyResolver.Register(typeof (JsonSerializer), () => serializer);
Если вы используете пользовательский IoC, вы можете столкнуться с проблемами, потому что JsonSerializer
- это конкретный тип, а некоторые IoC, например, Ninject будут вводить несвязанные конкретные типы. В случае Ninjects решение заключается в регистрации его с помощью Ninject, а не с SignalRs own DependencyResolver
var settings = new JsonSerializerSettings();
settings.ContractResolver = new SignalRContractResolver();
var serializer = JsonSerializer.Create(settings);
kernel.Bind<JsonSerializer>().ToConstant(serializer);
Дополнительная информация в моем блоге: http://andersmalmgren.com/2014/02/27/why-overriding-jsonserializer-no-longer-work-in-signalr-2-0/
Ответ Андерса правильный; Я просто хотел добавить, что для тех, кто использует AutoFac вместо Ninject, вы должны использовать эту регистрацию в своем startup.cs
:
var settings = new JsonSerializerSettings();
settings.ContractResolver = new SignalRContractResolver();
var serializer = JsonSerializer.Create(settings);
builder.RegisterInstance(serializer).As<JsonSerializer>();
Для использования с ASP.NET Core вы можете зарегистрировать JsonSerializer следующим образом: Startup → ConfigureServices:
var settings = new JsonSerializerSettings { ContractResolver = new SignalRContractResolver() };
var serializer = JsonSerializer.Create(settings);
services.AddSingleton(serializer);