Ich kann eine Liste der Tiere nicht auf der Festplatte mit XML-Serialisierung speichern.XML-Serialisierung der Liste <Object>
Ich erhalte die Ausnahme: Geworfen: "Der Typ AnimalLibrary.Animals.Mammals.Dog wurde nicht erwartet. Verwenden Sie das XmlInclude oder SoapInclude Attribut, um Typen anzugeben, die nicht statisch bekannt sind." (System.InvalidOperationException)
Wenn ich den kommentierten Code mit dem "Hund" versuche, wird es wie erwartet funktionieren und das XML generiert. Aber derselbe Hund, der als einziges Element in die Liste geschickt wurde, funktioniert nicht.
[XmlElement("animalList")]
public List<Animal> animalList = new List<Animal>();
public bool SaveBinary(string fileName)
{
Mammals.Dog dog = (Mammals.Dog)animalList[0];
//IObjectSerializer<Mammals.Dog> obj = new XMLObjectSerializer<Mammals.Dog>();
IObjectSerializer<List<Animal>> obj = new XMLObjectSerializer<List<Animal>>();
bool saved = obj.SaveFile(fileName, animalList);
if (saved)
return true;
return false;
}
XML Serializer
public bool SaveFile(string fileName, T objectToSerialize)
{
try
{
//Will overwrite old file
XmlSerializer mySerializer = new XmlSerializer(typeof(T));
StreamWriter myWriter = new StreamWriter(fileName);
mySerializer.Serialize(myWriter, objectToSerialize);
myWriter.Close();
}
catch (IOException ex)
{
Console.WriteLine("IO Exception ", ex.Message);
return false;
}
return true;
}
Dateien für die Vererbung des Hundes. In den Klassen befinden sich keine XML-Tags.
[XmlRoot(ElementName="Animal")]
public abstract class Animal : IAnimal
{
/// <summary>
/// Id of animal
/// </summary>
private string id;
public string ID
........
[XmlRoot(ElementName = "Animals")]
public abstract class Mammal : Animal
{
public int NumberofTeeth { get; set; }
........
[XmlRoot(ElementName="Dog")]
public class Dog : Mammal
{
/// <summary>
/// Constructor - Create an instance of a Dog
/// </summary>
public Dog()
{
}
........
Du hast mich gerettet nur Stunden :) – user2130951