2010-09-26 33 views
8

Tôi đang gặp phải ngoại lệ này trong dự án của tôi sử dụng Protobuf.net:protobuf.net kiểu phụ bất ngờ

InvalidOperationException "Unexpected sub-type: foo" 

Tôi đã một lớp mà tôi gửi mà trông như thế này:

class message 
{ 
    list<bar> listOfBars; 
} 

foo kế thừa thanh, Tuy nhiên protobuf dường như bị nghẹt thở và tạo ra ngoại lệ ở trên. Có cách nào đó quanh đây không? Tôi cần để có thể giữ tất cả các kiểu con khác nhau của thanh trong danh sách, do đó, một giải pháp ràng buộc loại hơn sẽ khó khăn/không thể.

Trả lời

14

tôi có thể bị nhầm lẫn, nhưng tôi nghĩ rằng bạn cần phải xác định trên lớp được thừa kế mà phân nhóm kế thừa từ nó, ví dụ:

[Serializable, ProtoContract, ProtoInclude(100, typeof(Foo))] 
class Bar { } 

[Serializable, ProtoContract] 
class Foo : Bar { } // Inherits from Bar 
+0

Tôi sẽ thử điều đó, sẽ mất một lúc vì Bar và foo đang ở trong các dự án khác nhau. Tôi đoán tôi sẽ phải fiddle xung quanh các dependancies một chút:/ – Martin

+0

Thankyou, mà làm việc: D – Martin

+0

@Martin - không có vấn đề. – GenericTypeTea

0

Tôi không phải là 100% trên đệm giao thức, và có lẽ tôi m cách tắt cơ sở ở đây nhưng bạn có nghĩ rằng danh sách được gán từ danh sách nơi Bar kế thừa từ Foo? Đây không phải là trường hợp - chúng được coi là hai loại khác nhau không có quan hệ. Trong .NET 4, các tham số Type covariant được hỗ trợ nhưng nó yêu cầu sự hỗ trợ từ bộ sưu tập (mà List không cung cấp ngay cả trong .NET 4, vì đây sẽ là một thay đổi phá vỡ - cho là mã cũ hơn cố gắng này bị hỏng, nhưng nó vẫn một thay đổi trong hành vi)

+0

Tôi không giả định hiệp phương sai, tôi chỉ muốn có một Danh sách mà tôi có thể thêm (foo) vào. – Martin