[DataContract] public class Foo
{
[DataMember(Order = 1)] public int FooId { get; set; }
}
[DataContract] public class Bar : Foo
{
[DataMember(Order = 2)] public string Name { get; set; }
}
[DataContract] public class Baz : Bar
{
[DataMember(Order = 3)] public string BazName { get; set; }
}
फिर, कोड मैं सेटअप में एक नया TypeModel और मेरे उपप्रकारमेरी सूची <Foo> प्रोटोबफ-नेट के साथ क्रमबद्ध क्यों नहीं होगी?
_ProtobufSerializer = TypeModel.Create();
_ProtobufSerializer.Add(typeof(Bar), true);
_ProtobufSerializer.Add(typeof(Baz), true);
var type = _ProtobufSerializer.Add(typeof(Foo), true);
type.AddSubType(100, typeof(Bar));
type.AddSubType(101, typeof(Baz));
अब जोड़ने के लिए, मैं फू, बार और बाज ठीक की घटनाओं को क्रमानुसार कर सकते हैं। अगर मैं
var listThatWorks = new List<Foo> { new Foo { FooId = 12 } }
var anotherListThatWorks = new List<Foo> { new Bar { FooId = 12, Name = "Test" } }
क्रमबद्ध करता है तो यह ठीक काम करता है। हालांकि, अगर मैं क्रमानुसार
var fails = new List<Foo> { new Baz { FooId = 12, Name = "Test" } }
तब मैं संदेश "अप्रत्याशित उप-प्रकार: बाज" के साथ एक InvalidOperationException मिलता है। मैं क्या गलत कर रहा हूं? क्या प्रोटोबफ-नेट के साथ उप-प्रकारों का उपयोग करना एक बुरा विचार है?
इसके अलावा, मुझे पता लगाने में मदद के लिए @ बीएफरी के लिए धन्यवाद, यह सबक्लास के दो स्तर होने से संबंधित है।
संबंधित प्रश्न: [protobuf.net अप्रत्याशित उप प्रकार] (http://stackoverflow.com/questions/3797651/protobuf-net-unexpected-subtype) –
@ एम। बाबाकॉक - मैंने देखा। मेरा मानना है कि शीर्ष प्रतिक्रिया प्रोटोबफ-नेट के पुराने संस्करण का जिक्र कर रही थी (गलत हो सकती है)। वह, और प्रस्तावित उत्तर काम नहीं किया। – AgileJon
मैंने बस एक सरल कंसोल ऐप में अपना कोड आजमाया: http://pastie.org/3692350 और यह मेरे लिए काम करता है, कोई अपवाद नहीं .... – BFree