в protobuf-net можно ли частично десериализовать сообщение на основе базового типа?
В моей системе есть иерархия наследования, в которой каждое сообщение наследуется от MessageBase. MessageBase имеет тип сообщения uint. В идеале я хочу только десериализовать MessageBase и проверить, интересует ли меня MessageType, тогда я могу либо выбросить сообщение, либо принять решение о десериализации фактического сообщения. Это сделано для экономии затрат на десериализацию (у меня есть бюджет цикла процессора и много сообщений для обработки).
Пример использования показан ниже.
Большое спасибо.
MessageBase msgBase = ..deserialize;
if(msgBase.MessageType = 1)//1 is the Tick msg type
{
Tick tick = ..deserialize actual msg;
//do something with tick
}
//throw away msgBase
[ProtoContract,ProtoInclude(1, typeof(Tick))]
public class MessageBase
{
protected uint _messageType;
[ProtoMember(1)]
public uint MessageType
{
get { return _messageType; }
set{ _messageType = value;}
}
}
[ProtoContract]
public public class Tick : MessageBase
{
private int _tickId;
private double _value;
public Tick()
{
_messageType = 1;
}
[ProtoMember(1)]
public int TickID
{
get { return _tickId; }
set { _tickId = value; }
}
[ProtoMember(2)]
public double Value
{
get { return _value; }
set { _value = value; }
}
}