sagen, dass ich ein paar Grundobjekte haben in etwa so:Wie kann ich XML deserialisieren, ohne vorher den Typ zu kennen?
[Serializable]
public class Base
{
public string Property1 { get; set; }
public int Property2 { get; set; }
}
[Serializable]
public class Sub: Base
{
public List<string> Property3 { get; set; }
public Sub():base()
{
Property3 = new List<string>();
}
}
Und ich serialisiert sie etwa so:
Sub s = new Sub {Property1 = "subtest", Property2 = 1000};
s.Property3.Add("item 1");
s.Property3.Add("item 2");
XmlSerializer sFormater = new XmlSerializer(typeof(Sub));
using (FileStream fStream = new FileStream("SubData.xml",
FileMode.Create, FileAccess.Write, FileShare.None))
{
sFormater.Serialize(fStream, s);
}
Wie kann ich deserialisieren ihnen, so dass ich wieder die richtige Klasse bekommen?
Wie in, würde ich so etwas wie diese
XmlSerializer bFormater = new XmlSerializer(typeof (Base));
Base newBase;
using (FileStream fStream = new FileStream("BaseData.xml",
FileMode.Open, FileAccess.Read, FileShare.Read))
{
newBase = (Base) bFormater.Deserialize(fStream);
}
will Außer ich in der Lage sein würde ihm eine XML-Datei für jede Klasse zu übergeben, die erstellt werden würde von Basis und die richtige Klasse absteigt.
Ich denke, ich könnte den Namen des Wurzelknotens des XML lesen und eine switch-Anweisung verwenden, um den richtigen XmlSerializer zu erstellen, aber ich fragte mich, ob es einen einfacheren Weg gab.
Ok. Gerade kontrolliert. Es wirft eine Ausnahme auf. Habe den letzten Para entfernt. – Kirtan
Ok, habe meinen Kommentar gelöscht, da er nicht mehr zutrifft. – Ray