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
找到更多信息
我在 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