[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; }
}
Dann in Code, den ich Setup eine neue TypeModel und meine Subtypen Nun fügen SieWarum wird meine Liste <Foo> nicht serialisiert mit Protobuf-Net?
_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));
, kann ich Instanzen von Foo, Bar und Baz feinem serialisiert. Wenn ich serialisieren
var listThatWorks = new List<Foo> { new Foo { FooId = 12 } }
var anotherListThatWorks = new List<Foo> { new Bar { FooId = 12, Name = "Test" } }
Das funktioniert gut. Allerdings, wenn ich serialisiert
var fails = new List<Foo> { new Baz { FooId = 12, Name = "Test" } }
Dann bekomme ich eine InvalidOperationException mit der Meldung „Unexpected Untertyp: Baz“. Was mache ich falsch? Ist es nur eine schlechte Idee, Untertypen mit protobuf-net zu verwenden?
Auch dank @BFree für die hilft mir herauszufinden, dass dies mit zwei Ebenen von Unterklassen verbunden ist.
In Verbindung stehende Frage: [protobuf.net Unerwarteter Subtyp] (http://stackoverflow.com/questions/3797651/protobuf-net-unexpected-subtype) –
@ M.Babcock - Ich sah das. Ich glaube, die Top-Antwort bezog sich auf eine alte Version von Protobuf-Net (könnte falsch sein). Das und die vorgeschlagenen Antworten haben nicht funktioniert. – AgileJon
Ich habe gerade Ihren Code in einer einfachen Konsole App versucht: http://pastie.org/3692350 und es funktionierte für mich, keine Ausnahmen .... – BFree