使用signalR

时间:2019-04-01 11:58:39

标签: c# asp.net-core signalr

我在忽略属性时遇到问题,因此不会将其发送给客户端。我有这个物体

public class UserEntry : IComparable<UserEntry>
{
    [JsonIgnore]
    public string UserId { get; set; }

    public string AnonymousUserId { get; set; }
}

例如,当我向我的signalR应用程序发送消息时,UserId仍在数据中,但我只想发送AnonymousUserId,因为{{ 1}}仅用于后端,并且永远不会在客户端中使用。

所以当我到达这里

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; } } 解决的问题是,当它发送给客户端时,应该忽略UserId,因此,如果我登录到客户端的条目,那里应该没有UserId。

1 个答案:

答案 0 :(得分:0)

您需要在您的实体中添加以下功能:

public bool ShouldSerializeXXXX() { return false; }

XXXX更改为您的属性名称。

对于您的情况UserId

public bool ShouldSerializeUserId() { return false; }

如果需要使其动态,可以在返回字段中输入静态布尔值,并在需要时进行更改

编辑

关于您的评论,这就是我的情况: 我有一个带有指纹作为字符串字段的人员类,并且我不想通过SignalR集线器甚至是Web服务将其发送到,但是通过使用特定的操作来获取指纹,所以考虑实体{{1 }}的指纹如下

person

我添加了此方法:

public string fingerprint { get; set; }

public bool ShouldSerializefingerprint() { return ShouldSerializefingerprintTest; } 字段是一个静态布尔属性,可以将其编辑为true或false 默认情况下为false,因此不会在任何webservice / signalR上显示指纹

当我需要将指纹ShouldSerializefingerprintTest移到ShouldSerializefingerprintTest时 但是true可以满足您的需求。

您可以在microsoft doc上找到更多信息。