serialization - SignalR : use camel case

标签 serialization json.net signalr deserialization

我想知道是否有办法配置 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/

相关文章:

c# - DataContractJsonSerializer 抛出异常预期状态 'Element' .. 遇到 'Text' 名称 '',命名空间 ''

json - 如何将数据序列化为 JSON 对象

python - 在 Django 中,如何序列化返回 dict 对象(使用 .values() 创建)的 QuerySet

javascript - 使用 SignalR 连接 Knockout(对象不支持属性或方法)

java 8反序列化base64编码的字符串

json.net - 不同的 Newtonsoft.Json.dll dotnet 发布与使用 Visual Studio 发布

json.net - 如何使用 JsonConvert.DeserializeObject 忽略空数组?

c# - 带有 Json.Net 格式化程序的 ChannelFactory

asp.net - 几分钟后 Signalr 停止执行回调

asp.net - SignalR(Hub) 可以发送除信号生成器之外的消息吗?