public virtual void Encode(ProtocolBuffer protocolBuffer, object data)
 {
     if (data == null)
     {
         throw new OptionalAnnotationNotFoundForNullObjectException();
     }
 }
 public virtual void DecodeToInstance(ProtocolBuffer protocolBuffer, object instance)
 {
     throw new NotImplementedException();
 }
 public abstract object Decode(ProtocolBuffer protocolBuffer);