采用具有继承和接口的protobuf-net

本文关键字:接口 protobuf-net 继承 | 更新日期: 2023-09-27 18:07:04

我有一个合约原型如下:

[ProtoContract]
public MyContract: ContractBase
{
   [ProtoMember(1)] 
   List<IMyDto> MyData
  {
      get;
     set;
  }
}

My MyDto是这样的,它的实现MyDto

[ProtoInclude(600, typeof(MyDto))]
public interface IMyDto
{
   int MyData
   {
    get;
    set;
   }
}
[ProtoContract]
public class MyDto :IMyDto
{
   [ProtoMember(1)]
   int MyData
   {
    get;
    set;
   }
}

最后,我的ContractBase是这样的:

[ProtoContract]
[ProtoInclude(500, typeof(MyContract))]
public class ContractBase
{
   [ProtoMember(501)]
   public string[] ErrorMessages
   {
     get;
     set;
   }
 }

当我进行web服务调用时,我一直得到以下错误:

不可能为:ContractBase --> System准备序列化器。InvalidOperationException:没有为type: IMyDto定义序列化器

请注意,这是用于理解问题的简化版本的代码。

请让我知道我做错了什么?非常感谢任何帮助。

谢谢。

采用具有继承和接口的protobuf-net

[ProtoContract]属性标记IMyDto
在我做了那件事之后,它对我很有效。