В protobuf-net возможно ли частично десериализовать сообщение на основе базового типа

в 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; }
    }
}
5
задан DayTwo 15 February 2011 в 10:22
поделиться