【问题标题】:Signalr hub does not serialize its method parameter's attributes correctlySignalr hub 未正确序列化其方法参数的属性
【发布时间】:2020-09-12 23:44:09
【问题描述】:

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

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

但是当客户端(Javascript 客户端)调用此方法时,它会正确传递对象,但除非我将属性名称更改为“CamelCase”,否则该对象的属性始终为空。如下图:

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

我尝试了什么:

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

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

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

 .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。

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

【问题讨论】:

  • 您的项目的 .NET Core 版本是什么?并请分享您的hub方法和js客户端的相关代码。
  • 我在 dotnet core 3.1 上运行

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多