1
在protobuf-net中進行序列化時,我有例外Unexpected sub-type: UnnamedGameServer.TrapInstance
。意外的子類型:MyNamespace.MyInheritedClass
這是代碼:
class test
{
void testMethod(PacketNewTrapResponse packet)
{
using (var stream = new MemoryStream())
{
Serializer.SerializeWithLengthPrefix<PacketNewTrapResponse>(stream, (PacketNewTrapResponse)packet, PrefixStyle.Base128);
}
}
}
[ProtoContract]
public class MapTrap
{
[ProtoMember(1)]
public IntegerVector2 Position;
[ProtoMember(2)]
public int TrapServerID;
[ProtoMember(3)]
public int LocationID;
}
[ProtoContract, ProtoInclude(1, typeof(MapTrap))]
class TrapInstance : MapTrap
{
public TrapInstance(TrapProperties trap, SessionCharacter session, int serverTrapId, int locationId, IntegerVector2 position)
{
TrapServerID = serverTrapId;
Trap = trap;
Position = position;
LocationID = locationId;
OwnerOfTrap = session;
LocationID = locationId;
Position = position;
}
public SessionCharacter OwnerOfTrap { get; set; }
public TrapProperties Trap { get; set; }
}
我有一種預感'ProtoInclude'各地工作的另一種方式 - 它似乎類似於WCF的'KnownType'和[這個問題](http://stackoverflow.com/questions/947666/what-does- protoinclude-attribute-mean-in-protobuf-net)就是這樣使用它的。你的'MapTrap'類應該包括反序列化器在處理基類型屬性時應該期望的所有子類型。 – millimoose