Hallo Ich versuche, ein Array von Objekten zu serialisieren, die von einer Klasse abgeleitet sind, und ich treffe den gleichen Fehler mit C#. Jede Hilfe wird sehr geschätzt.C# XML-Serialisierung von abgeleiteten Klassen
offensichtlich wurde dieses Beispiel für den Zweck dieser Post in der realen Welt verkleinert Shape würde eine Fülle von verschiedenen Formen enthalten.
Program.cs
namespace XMLInheritTests
{
class Program
{
static void Main(string[] args)
{
Shape[] a = new Shape[1] { new Square(1) };
FileStream fS = new FileStream("C:\\shape.xml",
FileMode.OpenOrCreate);
XmlSerializer xS = new XmlSerializer(a.GetType());
Console.WriteLine("writing");
try
{
xS.Serialize(fS, a);
}
catch (Exception e)
{
Console.WriteLine(e.InnerException.ToString());
Console.ReadKey();
}
fS.Close();
Console.WriteLine("Fin");
}
}
}
Shape.cs
namespace XMLInheritTests
{
public abstract class Shape
{
public Shape() { }
public int area;
public int edges;
}
}
Square.cs
namespace XMLInheritTests
{
public class Square : Shape
{
public int iSize;
public Square() { }
public Square(int size)
{
iSize = size;
edges = 4;
area = size * size;
}
}
}
Fehler: System.InvalidOperationException: Der Typ XMLInheritTests.Square war nicht zu erwarten. Verwenden Sie das XmlInclude- oder SoapInclude-Attribut, um Typen anzugeben, die statisch nicht bekannt sind.
bei Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterShapeA rray.Write2_Shape (String n, String ns, Form o, Boolean isNullable, Boolean müssen Typ)
bei Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterShapeA rray.Write3_ArrayOfShape (Object o)
Vielen Dank
Als eine Seite, öffentliche Felder sind * in der Regel * zu vermeiden; Eine 'public int Size {get; set;}' wäre vorzuziehen. –
Sie könnten * auch * die Kanten und die Größe als virtuelle 'get'-Eigenschaften haben, so dass Sie sie nicht ** speichern müssen. –