[英]How can I XML Serialize an object that is the base class and has 4 derived classes
所以這是我的基礎 class:
[Serializable]
public class Clienti:IComparable
{
public String Nume { get; set; }
public String Prenume { get; set; }
public String Adresa { get; set; }
public long CNP { get; set; }
public String SerieBuletin { get; set; }
public String DataNasterii { get; set; }
public String Telefon { get; set; }
public List<Asigurari> listaAsigurari { get; set; }
}
Clienti 中的列表 class 是這個:
[Serializable]
public abstract class Asigurari
{
//atribute cu AutoProperties
public String denumireBun { get; set; }
public String numeAsigurator { get; set; }
public String locatieBun { get; set; }
public float sumaAsigurare { get; set; }
public String dataPolitaInceput { get; set; }
public String dataPolitaSfarsit { get; set; }
public String tipAsigurare { get; set; }
}
實際上,這一個是其他 4 個類的基類:
[Serializable]
public class Automobil:Asigurari
{
public String marca { get; set; }
public String model { get; set; }
public String numarImatriculare { get; set; }
public String serieSasiu { get; set; }
public int capacitateCilindrica { get; set; }
public int numarLocuri { get; set; }
public int masaMaximaAdmisa { get; set; }
}
[Serializable]
public class AlteBunuri:Asigurari
{
public String detaliiBun { get; set; }
}
[Serializable]
public class Locuinta:Asigurari
{
public String Adresa { get; set; }
public tipLocuinta tip { get; set; }
public int numarNiveluri { get; set; }
public float suprafataTotala { get; set; }
public float suprafataUtilizabila { get; set; }
public int numarCamere { get; set; }
}
[Serializable]
public class Viata:Asigurari
{
public int varsta { get; set; }
public String grupaSangvina { get; set; }
public float inaltime { get; set; }
public float greutate { get; set; }
public Gen gen { get; set; }
public StareCivila stareCivila { get; set; }
}
這 4 個中的每個 class 都有帶參數的構造函數,而沒有參數。
我的 XML 序列化和反序列化代碼是這樣的:
private void xMLToolStripMenuItem_Click(object sender, EventArgs e)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Clienti>),new Type[] { typeof(Asigurari)});
System.IO.FileStream fs = File.Create("lista.xml");
xmlSerializer.Serialize(fs, listaClienti);
fs.Close();
MessageBox.Show("Serializare cu succes in lista.xml");
}
private void coleToolStripMenuItem_Click(object sender, EventArgs e)
{
XmlSerializer xml = new XmlSerializer(typeof(List<Clienti>));
try
{
FileStream fs = File.OpenRead("lista.xml");
listaClienti = xml.Deserialize(fs) as List<Clienti>;
fs.Close();
populareLV();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
對不起,很長的帖子,或者我沒有很好地解釋它。
正如異常消息所說,您需要讓基礎 class 知道派生類型,例如
[XmlInclude(typeof(Automobil))]
public abstract class Asigurari
{
//atribute cu AutoProperties
public String denumireBun { get; set; }
public String numeAsigurator { get; set; }
public String locatieBun { get; set; }
public float sumaAsigurare { get; set; }
public String dataPolitaInceput { get; set; }
public String dataPolitaSfarsit { get; set; }
public String tipAsigurare { get; set; }
}
調用XmlSerializer
class 的Serialize
或Deserialize
方法時使用XmlIncludeAttribute
。
您應該在基礎 class 上指定[XmlInclude(typeof(DerivedType1), XmlInclude(typeof(DerivedType2)...]
屬性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.