SinyalR'yi yapılandırmak için bir yol olup olmadığını bilmek istiyorum, böylece istemcideki hub işlevler deve kasasını kullanarak nesneleri döndürür.SinyalR: deve kasasını kullan
Teşekkürler. Eğer özel bir IoC kullanırsanız
SinyalR'yi yapılandırmak için bir yol olup olmadığını bilmek istiyorum, böylece istemcideki hub işlevler deve kasasını kullanarak nesneleri döndürür.SinyalR: deve kasasını kullan
Teşekkürler. Eğer özel bir IoC kullanırsanız
Rulo
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);
}
}
gibi kendi Conttract çözümleyici JsonSerializer
somut tipi ve örneğin gibi bazı IOCs çünkü sorunlarla çalıştırabilirsiniz
var settings = new JsonSerializerSettings();
settings.ContractResolver = new SignalRContractResolver();
var serializer = JsonSerializer.Create(settings);
GlobalHost.DependencyResolver.Register(typeof (JsonSerializer),() => serializer);
gibi ol Ninject, bağlanmamış beton türlerini enjekte edecektir. Ninjects durumda çözüm Ninject ile yerine SignalRs DependencyResolver
var settings = new JsonSerializerSettings();
settings.ContractResolver = new SignalRContractResolver();
var serializer = JsonSerializer.Create(settings);
kernel.Bind<JsonSerializer>().ToConstant(serializer);
sahibi ile arasında kaydetmek için blogumda
diğer bilgiler: http://andersmalmgren.com/2014/02/27/why-overriding-jsonserializer-no-longer-work-in-signalr-2-0/
Anders yanıt doğrudur; ASP .NET Çekirdek ile kullanım için
var settings = new JsonSerializerSettings();
settings.ContractResolver = new SignalRContractResolver();
var serializer = JsonSerializer.Create(settings);
builder.RegisterInstance(serializer).As<JsonSerializer>();
, başlangıç böyle JsonSerializer kayıt olabilirsiniz -> ConfigureServices: Sadece size startup.cs
bu kaydı kullanmalısınız yerine Ninject ait AutoFac kullanan herkes için eklemek istedim:
var settings = new JsonSerializerSettings { ContractResolver = new SignalRContractResolver() };
var serializer = JsonSerializer.Create(settings);
services.AddSingleton(serializer);
Eğer SignalR yapılandırma ile karışmaması istiyorum ya da çok fazla sorunlarını, sen JsonProperty modelinize serileştirme sonra özellik adını belirtmek için özellik ekleyebilir bulundu yoksa. JsonProperty, SignalR'ın serileştirme için kullandığı JSON.NET'ten.
[JsonProperty("id")]
public byte Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
bu daha fazla güçlük, her defasında bu sabit kod dizelerini değiştirmek zorunda kalacaksınız. – dafriskymonkey
Bir çekicilik gibi çalışıyor. – dafriskymonkey
Aynı yapılandırmayı ASP.NET 5/SignalR 3'te nasıl yapacağınızı biliyor musunuz? GlobalHost şimdi yeni bağımlılık enjeksiyonu stili ile değiştirildi ... – Mikhail
Üzgünüz, henüz SignalR 3'e bakmış, – Anders