#c# #asp.net-core #signalr
#c# #asp.net-core #signalr
Вопрос:
у меня проблема с игнорированием атрибута, поэтому он не отправляется клиенту. У меня есть этот объект
public class UserEntry : IComparable<UserEntry>
{
[JsonIgnore]
public string UserId { get; set; }
public string AnonymousUserId { get; set; }
}
И у меня возникает проблема, когда, например, я отправляю сообщение в свое приложение SignalR, которое UserId
все еще находится в данных, но я хочу, чтобы AnonymousUserId
оно было отправлено только потому, что UserId
используется только в серверной части и никогда не должно быть в клиенте.
итак, когда я доберусь сюда
public Task TopUserBroadcast(TopUsersBroadcastNotificationModel model)
{
SignalRClient.SendAsync(SignalRAppMethods.Broadcast, Constants.GetInfoGroup(model.InfoId), ResponseMessageIDs.TopUsers,model.Entries);
return Task.CompletedTask;
}
userId
Все еще находится в model.Entries
. В любом случае, я могу заставить его игнорировать этот атрибут?
и TopUsersBroadcastNotificationModel
выглядит так
public class TopUsersBroadcastNotificationModel
{
public List<UserEntry> Entries { get; set; }
public long InfoId { get; set; }
public TopUsersBroadcastNotificationModel(List<UserEntry> entries, long InfoId)
{
Entries = entries;
InfoId = infoId;
}
}
Итак, чего я действительно хочу и надеялся, что [JsonIgnore]
решит, так это то, что при отправке клиенту идентификатор пользователя следует игнорировать, поэтому, если я регистрирую записи, которые я получаю на клиенте, там не должно быть идентификатора пользователя.
Ответ №1:
вам нужно добавить в свою сущность функцию следующим образом :
public bool ShouldSerializeXXXX() { return false; }
измените XXXX
на свое имя атрибута.
в вашем случае UserId
:
public bool ShouldSerializeUserId() { return false; }
Если вам нужно сделать его динамическим, вы можете ввести статическое логическое значение в поле возврата и изменить его, когда вам нужно
Редактировать
что касается вашего комментария, это то, что работает в моем случае: у меня есть класс person с fingerprint в виде строкового поля, и я не хотел отправлять его через SignalR hub или даже веб-сервисы, но с помощью определенного действия для получения fingerprint , так что рассматривайте объект person
с атрибутами fingerprint следующим образом
public string fingerprint { get; set; }
я добавил этот метод :
public bool ShouldSerializefingerprint() { return ShouldSerializefingerprintTest; }
ShouldSerializefingerprintTest
поле представляет собой статические логические атрибуты, которые могут быть изменены на true или false
по умолчанию значение false, поэтому отпечаток пальца не будет отображаться ни в одном веб-сервисе / SignalR
и когда мне нужно получить отпечаток, ShouldSerializefingerprintTest
чтобы true
, но public bool ShouldSerializefingerprint() { return false; }
я могу сделать то, что вам нужно.
вы можете найти больше в документе Microsoft.
Комментарии:
1. Как бы это удалило / проигнорировало атрибут перед его отправкой? у вас есть пример того, где это вызвать и как это работает?