實戰經驗分享之C#對象XML序列化

來源:互聯網
上載者:User

標籤:main   str   com   []   資訊   輸出   來源   actor   設定檔   

.Net Framework提供了對應的System.Xml.Seriazliation.XmlSerializer負責把對象序列化到XML,和從XML中還原序列化為對象。Serializer的使用比較直觀,需要多注意的是XML序列化相關的Attribute,怎麼把這些attribute應用到我們的對象,以及對象公用屬性上面去,產生滿足預期格式的XML。

需求來源於一檔案轉換項目,將一個XML格式的檔案轉換成另一種格式。公司的架構也大量使用了XmlSerializer來處理系統裡大量配置,每一個檔案設定檔對應一種類型的多個配置項。

關鍵知識點

序列化常用Attribute講解說明

[XmlRootAttribute("MyCity", Namespace="abc.abc", IsNullable=false)]     // 當該類為Xml根節點時,以此為根節點名稱。
public class City

[XmlAttribute("AreaName")]    // 表現為Xml節點屬性。<... AreaName="..."/>
public string Name

[XmlElementAttribute("AreaId", IsNullable = false)]    // 表現為Xml節點。<AreaId>...</AreaId>
public string Id

[XmlArrayAttribute("Areas")]    // 表現為Xml階層,根為Areas,其所屬的每個該集合節點元素名為類名。<Areas><Area ... /><Area ... /></Areas>
public Area[] Areas

[XmlElementAttribute("Area", IsNullable = false)]    // 表現為水平結構的Xml節點。<Area ... /><Area ... />...
public Area[] Areas

[XmlIgnoreAttribute]    // 忽略該元素的序列化。

實際案例

 

類定義:

1)    OrderEntity單據類XML裡是最頂層的Root節點。

/// <summary>    /// 訂單資訊    /// </summary>    [Serializable]    [XmlRoot("Document")]    public class OrderEntity    {        [XmlArray("Events"), XmlArrayItem("Event")]        public OrderEvent[] Event { get; set; }            }

2) OrderEvent單據類型(事件)描述實體

/// <summary>    /// 單據類型(事件)描述資訊    /// </summary>    [Serializable]        public class OrderEvent    {        /// <summary>        /// 單據名稱        /// </summary>        [XmlAttribute("Name")]        public string Name { get; set; }        /// <summary>        /// 庫存動作        /// </summary>        [XmlAttribute("MainAction")]        public string MainAction { get; set; }        /// <summary>        /// 單據明細項        /// </summary>        [XmlArray("DataField"), XmlArrayItem("Data")]        public OrderDetail[] details { get; set; }    }

3)、資料明細類

 /// <summary>    /// 單據明細項目    /// </summary>    [Serializable]    public class OrderDetail    {        [XmlAttribute("Code")]        public string Code { get; set; }        [XmlAttribute("Actor")]        public string Actor { get; set; }        [XmlAttribute("ActDate")]        public string ActDate { get; set; }        [XmlAttribute("CorpOrderID")]        public string CorpOrderID { get; set; }        [XmlAttribute("FromCorpID")]        public string FromCorpID { get; set; }        [XmlAttribute("ToCorpID")]        public string ToCorpID { get; set; }        [XmlAttribute("OwnerID")]        public string OwnerID { get; set; }    }

4)序列化的實際代碼

#region 初始化訂單對象並完成序列化                                    OrderEntity result_File_Object = new OrderEntity                                    {                                        Event = new OrderEvent[]                                         {                                            new OrderEvent                                            {                                                Name =orderName ,                                                MainAction= dt_Event.Rows[0]["MainAction"].ToString(),                                                details = query.Where(d => d.Code!=string.Empty).ToList().ToArray()                                            }                                        }                                    };                                    Program.SerializerToXML<OrderEntity>(path + "\\" + fileName, result_File_Object);                                    #endregion

  

 /// <summary>        /// 把對象序列化成xml檔案        /// </summary>        /// <typeparam name="T">對象的類</typeparam>        /// <param name="outFile">輸出的檔案和路徑</param>        /// <param name="t">對象的執行個體</param>        public static void SerializerToXML<T>(string outFile, T t) where T : class        {            using (System.IO.FileStream fs = new System.IO.FileStream(outFile, System.IO.FileMode.Create))            {                XmlSerializerNamespaces ns = new XmlSerializerNamespaces();                ns.Add("", "");                XmlSerializer xs = new XmlSerializer(typeof(T));                xs.Serialize(fs, t, ns);                fs.Flush();            }        }

  

實戰經驗分享之C#對象XML序列化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.