使用具有继承和接口的 protobuf-net
Using protobuf-net with inheritance and interface
我有一个合同原件如下:
[ProtoContract]
public MyContract: ContractBase
{
[ProtoMember(1)]
List<IMyDto> MyData
{
get;
set;
}
}
我的 IMyDto 看起来像这样及其实现 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;
}
}
当我进行网络服务调用时,我不断收到以下错误:
无法为 ContractBase 准备序列化程序 ---> System.InvalidOperationException:没有为类型定义序列化程序:IMyDto
请注意,这是用于理解问题的简化版代码。
请让我知道我做错了什么?
任何帮助深表感谢。
谢谢。
用 [ProtoContract]
属性标记 IMyDto
。
在我完成之后,它对我有用。
Getting Started documentation说的是,每个参与序列化的类型都需要这样标记。
我有一个合同原件如下:
[ProtoContract]
public MyContract: ContractBase
{
[ProtoMember(1)]
List<IMyDto> MyData
{
get;
set;
}
}
我的 IMyDto 看起来像这样及其实现 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;
}
}
当我进行网络服务调用时,我不断收到以下错误:
无法为 ContractBase 准备序列化程序 ---> System.InvalidOperationException:没有为类型定义序列化程序:IMyDto
请注意,这是用于理解问题的简化版代码。
请让我知道我做错了什么? 任何帮助深表感谢。
谢谢。
用 [ProtoContract]
属性标记 IMyDto
。
在我完成之后,它对我有用。
Getting Started documentation说的是,每个参与序列化的类型都需要这样标记。