代码之家  ›  专栏  ›  技术社区  ›  Martin

protobuf.net意外的子类型

  •  8
  • Martin  · 技术社区  · 14 年前

    我在使用protobuf.net的项目中遇到了这个异常:

    InvalidOperationException "Unexpected sub-type: foo"
    

    我有一个类,我发送的类如下:

    class message
    {
        list<bar> listOfBars;
    }
    

    foo继承了off bar,但是protobuf似乎对此感到窒息并生成上面的异常。有办法解决这个问题吗?我需要能够在列表中保存所有不同的条形图子类型,因此更类型约束的解决方案将是困难的/不可能的。

    2 回复  |  直到 14 年前
        1
  •  16
  •   djdd87    14 年前

    我可能错了,但我认为您需要在继承的类上指定从它继承的子类型,例如:

    [Serializable, ProtoContract, ProtoInclude(100, typeof(Foo))]
    class Bar { }
    
    [Serializable, ProtoContract]
    class Foo : Bar { } // Inherits from Bar
    
        2
  •  0
  •   x0n    14 年前

    我并不是100%使用协议缓冲区,也许我在这里有点离谱,但您是否认为列表是可以从BAR从foo继承的列表中分配的?事实并非如此,他们被认为是两种不同的类型,没有关系。在.NET 4中,支持协变类型参数,但它需要来自集合的支持(即使在.NET 4中,该列表也不提供,因为这将是一个破坏性的更改-可以说,较旧的代码尝试破坏它,但它仍然是行为的更改)