[英]Signalr hub does not serialize its method parameter's attributes correctly
我有一個 signalr 集線器配置良好並且與客戶端通信良好。 但是我的 hub 方法接受特定類型的參數,並且代表這種類型的 class 具有 Pascal 大小寫屬性。 如下所示:
public List<DataChanges> Changes { get; set; }
但是當客戶端(Javascript客戶端)調用此方法時,它會正確傳遞 object 但是,除非我將屬性名稱更改為“CamelCase”,否則此 object 的屬性始終為 null 如下所示:
public List<DataChanges> changes { get; set; }
我嘗試了什么:
我在object的屬性中依次添加了以下屬性,但錯誤仍然存在。
[DataMember(Name = "changes")]
[JsonProperty("changes")]
在我的啟動 class 中,我添加了 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。
有人可以告訴我一個解決方案嗎?
您必須在啟動項目中添加: services.AddSignalR().AddJsonProtocol(options => {options.PayloadSerializerOptions.PropertyNamingPolicy = null }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.