C# protobuf.net意外的子类型
我在使用Protobuf.net的项目中遇到此异常:C# protobuf.net意外的子类型,c#,.net,protocol-buffers,protobuf-net,C#,.net,Protocol Buffers,Protobuf Net,我在使用Protobuf.net的项目中遇到此异常: InvalidOperationException "Unexpected sub-type: foo" 我正在发送一个类,如下所示: class message { list<bar> listOfBars; } 类消息 { 酒吧名单; } foo继承了off-bar,但是protobuf似乎对此感到窒息,并生成了上面的异常。有办法解决这个问题吗?我需要能够在列表中保留bar的所有不同子类型,因此更受类型约束的解决
InvalidOperationException "Unexpected sub-type: foo"
我正在发送一个类,如下所示:
class message
{
list<bar> listOfBars;
}
类消息
{
酒吧名单;
}
foo继承了off-bar,但是protobuf似乎对此感到窒息,并生成了上面的异常。有办法解决这个问题吗?我需要能够在列表中保留bar的所有不同子类型,因此更受类型约束的解决方案将是困难的/不可能的。我可能弄错了,但我认为您需要在继承的类上指定从其继承的子类型,例如:
[Serializable, ProtoContract, ProtoInclude(100, typeof(Foo))]
class Bar { }
[Serializable, ProtoContract]
class Foo : Bar { } // Inherits from Bar
我不是100%使用协议缓冲区,也许我在这里有点离谱,但你们是否认为这个列表可以从Bar从Foo继承的列表中赋值?事实并非如此——它们被认为是两种不同的类型,没有任何关系。在.NET 4中,协变类型参数是受支持的,但它需要集合的支持(即使在.NET 4中,该列表也不提供,因为这将是一个突破性的更改-尝试此操作的旧代码可能会被破坏,但这仍然是一个行为上的更改)我会尝试,这需要一段时间,因为Bar和foo在不同的项目中。我想我得绕着依赖关系转一圈了:/@Martin@genericTypea回答得好;次要说明-不需要[Serializable](但也不会造成任何伤害),这是否违反了开闭原则?我的意思是,每次添加另一个子类时,都需要修改基类(include属性)?此外,基类和子类需要位于同一程序集中,以避免循环依赖。还有别的办法吗?也许手动设置protobuf模型(有相关文档吗)?@AntonioNakicAlfirevic:我肯定你已经发现了这一点,但对于任何遇到这一点的人来说:@RenniePet:Yepp,这是我最终成功使用的方法。我不是假设协方差,我只是想要一个可以添加(foo)的列表。