Ich habe eine Liste von Objekten, die eine gemeinsame Schnittstelle implementieren. Wenn ich versuche, es einfach zu serialisiert bekomme ich eine schöne Ausnahme, die mir sagt, dass die Serializer nicht Schnittstellen serialisiert werden kann:XmlSerializer Fehler Serialisierung Schnittstelle Objekte
private readonly ObservableCollection<ICanHasInterface> children = new ObservableCollection<ICanHasInterface>();
public ObservableCollection<ICanHasInterface> Children
{
get { return children; }
}
=> „Kann nicht Mitglied serialisiert ... vom Typ ... weil es sich um eine Schnittstelle“
Anscheinend fragt der Serializer den Typ der Objekte ab und markiert das XmlElement mit dem Attribut xsi:type
(was getan wird, wenn ein Objekt von einer anderen Klasse erbt) ist zu viel. So
, weil ich nicht will IXmlSerializable
implementieren, dachte ich eine Abhilfe auf die vielversprechenden zunächst aussah:
private readonly ObservableCollection<ICanHasInterface> children = new ObservableCollection<ICanHasInterface>();
[XmlIgnore()]
public ObservableCollection<ICanHasInterface> Children
{
get { return children; }
}
[XmlElement("Child")]
public List<object> ChildrenSerialized
{
get
{
return new List<object>(Children);
}
set
{
Children.Clear();
foreach (var child in value)
{
if (child is ICanHasInterface) AddChild(child as ICanHasInterface);
}
}
}
Damit zumindest die Serialisierung funktioniert gut (Anmerkung: Entweder geben Sie XmlInclude
Attribute für die Typen, die können in der ursprünglichen Liste sein oder ein Array von Typen im Konstruktor des Serialisierers übergeben), aber wenn das Objekt deserialisiert ist, endet die Children
Sammlung leer, weil der set
Block während Deserialisierung nie erreicht wird, ich bin ziemlich ratlos, warum dies ist; irgendwelche Ideen?
Vielen Dank, funktioniert perfekt mit einem Array! –