Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# protobuf.net意外的子类型_C#_.net_Protocol Buffers_Protobuf Net - Fatal编程技术网

C# 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的所有不同子类型,因此更受类型约束的解决

我在使用Protobuf.net的项目中遇到此异常:

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)的列表。