Концентратор Signalr неправильно сериализует атрибуты своего параметра метода - PullRequest
0 голосов
/ 26 мая 2020

У меня хорошо настроен хаб сигнализатора и он хорошо взаимодействует с клиентом. Но мой метод концентратора принимает параметры определенного типа c, а класс, представляющий этот тип, имеет Pascal свойства в регистре. Как показано ниже:

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

Но когда клиент (Javascript client) вызывает этот метод, он передает объект правильно, но свойство этого объекта всегда имеет значение null, если я не изменю имя свойства на " 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, и мое свойство всегда было нулевым.

Может кто-нибудь, пожалуйста, скажите мне решение для этого?

...