Code: Select all
public class Base
{
public int val { get; set; } = 10;
}
public class Derived : Base
{
public int val2 { get; set; } = 20;
}
Code: Select all
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Base));
Derived b = new Derived();
using (var file = new StreamWriter( "test.xml" ))
{
xmlSerializer.Serialize( file, b );
}
InvalidOperationException: Der Typ WordClockDesigner.Derived wurde nicht erwartet. Verwenden Sie das XmlInclude- oder SoapInclude-Attribut, um Typen anzugeben, die statisch nicht bekannt sind.
Jetzt frage ich mich: Warum geht es zu Derived, wenn ich ihm gesagt habe, dass es Base serialisieren soll? Es ist dumm, ich möchte nur, dass es die Eigenschaften von Base serialisiert...
NB: Dies ist ein vereinfachtes Beispiel; Mein echter Code ist komplexer und das Problem, das ich zu lösen versuche, besteht darin, Dutzende von Eigenschaften zu überspringen, nicht nur eine oder zwei. Ich muss eine Lösung finden, die funktioniert, ohne dass ich mich ewig an einen seltsamen Trick erinnern muss.
NB2: Die Verwendung von XmlSerializer(Type, Type[]) ist nicht die Lösung, weil ich die abgeleitete Klasse ausschließen möchte.
Ich verwende .NET 8
Mobile version