簡體   English   中英

我如何 XML 序列化作為基礎 class 並具有 4 個派生類的 object

[英]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 的SerializeDeserialize方法時使用XmlIncludeAttribute

您應該在基礎 class 上指定[XmlInclude(typeof(DerivedType1), XmlInclude(typeof(DerivedType2)...]屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM