簡體   English   中英

Signalr 集線器未正確序列化其方法參數的屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM