【发布时间】: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