У меня проблема с игнорированием атрибута, чтобы он не отправлялся клиенту. У меня есть этот объект
public class UserEntry : IComparable<UserEntry>
{
[JsonIgnore]
public string UserId { get; set; }
public string AnonymousUserId { get; set; }
}
И у меня возникает проблема, когда, например, когда я отправляю сообщение в мое приложение UserId
все еще находится в данных, но я только хочу, чтобы AnonymousUserId
отправлялся вниз, потому что UserId
используется только в 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]
что [JsonIgnore]
решит, так это то, что когда он отправляется клиенту, UserId должен игнорироваться, поэтому, если я регистрирую записи, которые я получаю, клиенту там не должно быть UserId.
вам нужно добавить функцию в вашей сущности следующим образом:
public bool ShouldSerializeXXXX() { return false; }
измените XXXX
на ваше имя атрибута.
в вашем случае UserId
:
public bool ShouldSerializeUserId() { return false; }
Если вам нужно сделать его динамическим, вы можете ввести статическое логическое значение в поле возврата и изменить его, когда вам нужно
РЕДАКТИРОВАТЬ
Что касается вашего комментария, это то, что работает в моем случае: у меня есть класс person с отпечатком пальца в виде строкового поля, и я не хотел отправлять его через концентратор SignalR или даже через веб-сервисы, но с помощью специального действия для получить отпечатки пальцев, так что considere в сущности person
с attributs отпечатка пальца следующим образом
public string fingerprint { get; set; }
я добавил этот метод:
public bool ShouldSerializefingerprint() { return ShouldSerializefingerprintTest; }
поле ShouldSerializefingerprintTest
- это статические логические атрибуты, которые можно изменить на true или false, по умолчанию это false, поэтому отпечаток не будет отображаться ни на одном веб-сервисе /signalR
и когда мне нужно, чтобы для отпечатка пальца ShouldSerializefingerprintTest
было установлено значение true
но public bool ShouldSerializefingerprint() { return false; }
public bool ShouldSerializefingerprint() { return false; }
можете делать то, что вам нужно.
Вы можете найти больше на Microsoft Doc.