0

我有一個紙牌遊戲程序,到目前爲止,聊天在主機和客戶端之間的TCPClient流之間來回運行。我想通過序列化和反序列化來實現這一點,這樣我就可以在主機和客戶端之間傳遞卡片。我試圖爲卡的傳遞創建一個單獨的TCPClient流,但它不起作用,並且認爲保留一個獲取文本消息以及卡的TCPClient流可能更容易。所以我創建了一個名爲cereal的類,它具有卡的屬性,這將幫助我從另一端的嵌入式數據庫卡重建卡。有沒有一種方法可以讓我的程序計算出卡片是否已經放入流中,或者它只是流中的文本,因此我可以將它正確地反序列化爲字符串或麥片?或者我應該添加一個字符串屬性到我的穀類,當該屬性在反序列化到穀物後被填充時,我會知道它只是文本(如果該字段在反序列化後是空的,我將知道它是一張牌)?我想嘗試一下,試圖將其反序列化爲一個字符串,如果失敗了,它會捕獲並作爲穀物投射。或者我剛剛擺脫這個基地,應該選擇另一條路線?我正在使用visual studio 2011,我使用的是binaryformatter,而且是序列化/反序列化的新手。從流中反序列化多種類型

回答

0

結束了創建的容器類,這是可序列化。如果我將文本發送到其他計算機,則將容器的文本屬性設置爲文本所在的位置。然後當收到這個容器時,如果它有文本,接收計算機將顯示文本。如果收到的容器包含一張卡片,它將創建該卡片並根據收到的容器中找到的其他屬性將其放在需要的位置。如果是丟棄物,則根據容器中的其他屬性找到該卡,並將其丟棄至正確的堆。我還在容器中包含了一個作爲String屬性的命令,因此如果所有其他屬性都爲false,則會查看命令屬性是否包含字符串。如果是,則調用命令接收方法並找到正確的命令並執行代碼。迄今爲止效果很好。

1

這應該適合你。寄BaseMessage在導線,然後檢查其類型進來

命名空間ConsoleApplication3 { 類節目 { 靜態無效的主要(字符串[]參數) { BaseMessage BM =新CardMessage(); 如果(bm.GetType()== typeof運算(CardMessage)) { } } }

class BaseMessage : ISerializable 
{ 
} 

class ChatMessage : BaseMessage 
{ 
} 

class CardMessage : BaseMessage 
{ 
} 

}