Игнорировать атрибут объекта при использовании signalR

2

У меня проблема с игнорированием атрибута, чтобы он не отправлялся клиенту. У меня есть этот объект

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.

Теги:
asp.net-core
signalr

1 ответ

0

вам нужно добавить функцию в вашей сущности следующим образом:

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.

  • 0
    Как это удалит / проигнорирует атрибут перед отправкой? У вас есть пример, где это назвать и как это работает?
  • 0
    @ JohanJönsson посмотри мои изменения

Ещё вопросы

Сообщество Overcoder
Наверх
Меню