1
我使用protobuf-net收到消息。該消息有1個字段,其中存儲消息的類型(該字段爲枚舉類型)。現在我知道該消息是從基類型繼承的類型。我如何將從串行器獲得的對象轉換爲適當的類型?轉換爲後代類型
等級的定義:
[ProtoContract]
class Annoucement
{
public enum msgType
{
AKCJA = 0,
CZEKAJ = 1,
GOTOWY = 2,
NOWY_GRACZ = 3,
LISTA_GRACZY = 4,
ERROR = 5,
MAPA = 6,
UPDATE = 7,
LISTAGIER = 8,
JOINGAME = 9,
QUIT = 10
}
[ProtoMember(1)]
public msgType typ;
}
[ProtoContract, ProtoInclude(14, typeof(Annoucement))]
class Update : Annoucement
{
[ProtoMember(1)]
public List<Tank> czolg;
[ProtoMember(2)]
public List<Pocisk> pocisk;
[ProtoMember(3, IsRequired = false)]
public List<Bonus> bonus;
}
我怎樣才能做一些想法類同此:
Annoucement ann = Serializer.DeserializeWithLengthPrefix<Annoucement> (str, PrefixStyle.Base128);
switch (ann.typ) {
case Annoucement.msgType.UPDATE:
{
Update temp = (Update)ann;
Console.WriteLine (temp.czolg.Count);
List<Tank>.Enumerator i = temp.czolg.GetEnumerator();
Console.WriteLine (i.Current.life);
}
break;
+1爲公共字段 - 不要這樣做。想想小貓。*真的。 –
我不明白爲什麼,但它看起來並不像你描述的那樣。我試圖發送更簡單的消息。當我做'Akcja temp =(Akcja)ann;'我得到_Unhandled異常:System.InvalidCastException:不能從源類型轉換到目標type_。當我嘗試接收Akcja時,我可以得到相同的結果。 –
@主 - 你*序列*它作爲'Akcja'? (是否與'Update'相同?)。很高興幫助,但需要確保我正在回答正確的事情... –