У меня хорошо настроен хаб сигнализатора и он хорошо взаимодействует с клиентом. Но мой метод концентратора принимает параметры определенного типа 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, и мое свойство всегда было нулевым.
Может кто-нибудь, пожалуйста, скажите мне решение для этого?