SignalR 对象不保持状态

SignalR object not keeping state

我在 blazor 上有一个 asp 托管的 webasnbly,使用 SignalR 将数据从服务器发送到客户端。这是服务器向客户端发送卡片:

FounderCard cardToSend = LinkedInCards.GetOne();
int ReaminigCards = LinkedInCards.Count;

cardToSend.IsLeaderOfBand= true;
cardToSend.IsSelected = true;

await Hub.Clients.All.SendAsync(MessageOrders.RevealLinkdinCard.ToString(), cardToSend, ReaminigCards);

这里是发送对象时的debug,填写清楚:

这里是接收客户端:

hub.On<FounderCard, int>(MessageOrders.RevealLinkdinCard.ToString(), (card, remainig) => {
                Game.RevealLinkedinCard(card, remainig);
            });

但是对象是新的。枚举上的值是 0 值..

PS:该方法适用于其他复杂结构作为播放器数据,所有字段都以正确格式到达目的地...

为了以防万一,这是要发送的 FounderCard 的定义:

public class FounderCard : Card
    {
    //base clase Card just implements Serialize and INotifyPropertyChanged
        public Sections Section;
        public Races Race;
        public string Color => FounderCommons.FromSectionToColor(this.Section);
        public string ID = String.Empty;
        public bool IsLeaderOfBand;
        public bool IsSelected;

        public void SetID(int counter)
        {
            this.ID = FounderCommons.GetSectionID(this.Section) + "_" + FounderCommons.GetRaceID(this.Race) + "_" + counter.ToString();
        }
    }

System.Text.Json(SignalR 中默认使用的 Json 库)默认不序列化字段。您需要通过添加 { get; set; } 将字段更改为属性,或者您可以在字段上设置属性 [JsonInclude]。可以在 https://docs.microsoft.com/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-6-0#include-fields

找到更多信息