javascript - Signalr hub 未正确序列化其方法参数的属性

标签 javascript c# .net-core signalr asp.net-core-signalr

我有一个配置良好的信号集线器,并且可以与客户端进行良好的通信。 但是我的集线器方法接受特定类型的参数,并且代表这种类型的类具有 Pascal 大小写属性。如下图:

    public List<DataChanges> Changes { get; set; }

但是当客户端(Javascript 客户端)调用这个方法时,它正确地传递了对象但是,这个对象的属性总是空的,除非我将属性的名称更改为“CamelCase”。如下图:

    public List<DataChanges> changes { get; set; }

我尝试过的:

我依次将以下属性添加到对象的属性中,但错误仍然存​​在。

    [DataMember(Name = "changes")]
    [JsonProperty("changes")]

在我的启动类中,我添加了signalr json协议(protocol)如下:

 .AddNewtonsoftJsonProtocol(options =>
        {
            //options.PayloadSerializerSettings.ContractResolver = new SignalRContractResolver();
            //options.PayloadSerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver { NamingStrategy = { OverrideSpecifiedNames = true } };
        })

这是 Signalr 合约解析器:

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(Startup).GetTypeInfo().Assembly;
    }


    public JsonContract ResolveContract(Type type)
    {
        if (type.GetTypeInfo().Assembly.Equals(_assembly))
            return _defaultContractSerializer.ResolveContract(type);

        return _camelCaseContractResolver.ResolveContract(type);
    }

}

我尝试了一些其他解决方案,但没有任何效果。 signalr 无法应用驼峰式大小写序列化,我的属性始终为 null。

有人可以告诉我解决方案吗?

最佳答案

你必须在启动项目中添加: services.AddSignalR().AddJsonProtocol(options => {options.PayloadSerializerOptions.PropertyNamingPolicy = null

关于javascript - Signalr hub 未正确序列化其方法参数的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62017616/

相关文章:

javascript - 如何为 angular-chart.js 中的每个栏设置不同的颜色?

javascript - __doPostBack() 导致回发但不调用 aspx 页面中的按钮单击事件

ssl - 在 .Net Core 控制台应用程序中生成受信任的自签名证书

javascript - 如何部署可扩展的 Parse LiveQuery Server?

javascript - 使用 jquery 为根 div 内的所有内部 div 设置 css

javascript - 身份验证 - 调用 $http 的 .then() 成功回调而不是错误回调

javascript - C# ASP.MVC 使用 Html.EditorFor 和 JavaScript 获取复选框值

c# - 加速写入 Amazon S3

linux - Linux 下带 dotnet 核心的 LDAP

performance - Kestrel 服务器与 HTTP.sys