我想知道是否有办法配置 SignalR,以便集线器中的客户端函数使用驼峰式大小写返回对象。
谢谢。
最佳答案
滚动您自己的契约(Contract)解析器,例如
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 将注入(inject)未绑定(bind)的具体类型。在 Ninjects 情况下,解决方案是将其注册到 Ninject 而不是 SignalR 自己的 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/
关于serialization - SignalR : use camel case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30005575/