Basato su this issue dal repository SignalR Core, non esiste un modo nativo per farlo al momento, ma è possibile creare un resolver di contratto personalizzato come indicato in this comment on an old SignalR issue.
Poiché quel thread è per SignalR 2.2.0, facciamo funzionare SignalR Core.
using System;
using System.Reflection;
using Microsoft.AspNetCore.SignalR.Infrastructure;
using Newtonsoft.Json.Serialization;
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).GetTypeInfo().Assembly;
}
public JsonContract ResolveContract(Type type)
{
if (type.GetTypeInfo().Assembly.Equals(_assembly))
return _defaultContractSerializer.ResolveContract(type);
return _camelCaseContractResolver.ResolveContract(type);
}
}
Quello che succede qui è che non è possibile utilizzare il contratto resolver caso di cammello per l'interno SignalR, perché si spezzerebbe la comunicazione con il cliente.
Quindi, ogni volta che risolviamo un contratto nel metodo ResolveContract
, dobbiamo verificare l'assemblaggio del tipo correntemente risolto e controllare che sia interno SignalR. In caso contrario, possiamo risolvere il contratto usando il caso dei cammelli.
A questo punto, è necessario registrare questo risolutore di contratto nel framework.
public void ConfigureServices(IServiceCollection services)
{
var settings = new JsonSerializerSettings();
settings.ContractResolver = new SignalRContractResolver();
var serializer = JsonSerializer.Create(settings);
services.Add(new ServiceDescriptor(typeof(JsonSerializer),
provider => serializer,
ServiceLifetime.Transient));
// register other services like SignalR, MVC and custom services
}
Buona fortuna!
fonte
2016-09-09 11:21:11
Queste domande e risposte sono per .net 4.5/4.6, non core. – PersonThing