decir que tengo un par de objetos básicos de este modo:¿Cómo deserializo XML sin conocer el tipo de antemano?
[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>();
}
}
Y les serializar este modo:
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);
}
cómo puedo deserializar, para que regrese a la clase correcta?
igual que en, me gustaría algo como esto
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);
}
Excepto que yo sería capaz de pasar un archivo XML para cualquier clase que desciende desde la base y la clase correcta sería creado.
Estoy pensando que podría leer el nombre del nodo raíz del XML y usar una instrucción switch para crear el XmlSerializer correcto, pero me preguntaba si habría una manera más sencilla.
Ok. Acabo de revisarlo. Está lanzando una excepción. Has eliminado el último párrafo. – Kirtan
Ok, borré mi comentario ya que no se aplica más. – Ray