daf*_*key 25 serialization json.net deserialization signalr
我想知道是否有办法配置SignalR,以便集线器中的客户端功能使用驼峰大小写返回对象.
谢谢.
And*_*ers 54
滚动你自己的Conttract解析器就像
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);
}
}
Run Code Online (Sandbox Code Playgroud)
注册就好
var settings = new JsonSerializerSettings();
settings.ContractResolver = new SignalRContractResolver();
var serializer = JsonSerializer.Create(settings);
GlobalHost.DependencyResolver.Register(typeof (JsonSerializer), () => serializer);
Run Code Online (Sandbox Code Playgroud)
如果您使用自定义IoC,您可能遇到问题,因为它JsonSerializer
是一种具体类型,而某些IoC(例如Ninject)将注入未绑定的具体类型.在Ninjects案例中,解决方案是使用Ninject而不是SignalRs自己注册它DependencyResolver
var settings = new JsonSerializerSettings();
settings.ContractResolver = new SignalRContractResolver();
var serializer = JsonSerializer.Create(settings);
kernel.Bind<JsonSerializer>().ToConstant(serializer);
Run Code Online (Sandbox Code Playgroud)
更多关于我博客的信息: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>();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9648 次 |
最近记录: |