代码之家  ›  专栏  ›  技术社区  ›  Damien Doumer

信号集线器未正确序列化其方法参数的属性

  •  0
  • Damien Doumer  · 技术社区  · 5 年前

    我有一个配置良好的信号集线器,并与客户机进行了良好的通信。 但是我的hub方法接受特定类型的参数,并且表示该类型的类具有Pascal cased属性。如下图所示:

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

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

    我尝试的是:

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

    在我的startup类中,我添加了signalr json协议,如下所示:

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

    以下是信号机合同解析程序:

    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);
        }
    
    }
    

    我尝试了一些其他的解决方案,但没有任何效果。信号器无法应用camel大小写序列化,并且我的属性始终为null。

    谁能告诉我一个解决办法吗?

    0 回复  |  直到 5 年前
        1
  •  0
  •   vannak    4 年前

    您必须在启动项目中添加以下内容: services.AddSignalR().AddJsonProtocol(options=>{options.PayloadSerializerOptions.PropertyNamingPolicy=null }