實戰經驗分享之C 物件XML序列化

2021-09-08 22:49:59 字數 2537 閱讀 2677

.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節點。...

public string id

[xmlarrayattribute("areas")]    // 表現為xml層次結構,根為areas,其所屬的每個該集合節點元素名為類名。

public area areas

[xmlelementattribute("area", isnullable = false)]    // 表現為水平結構的xml節點。...

public area areas

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

類定義:

1)    orderentity單據類xml裡是最頂層的root節點。

/// /// 訂單資訊

///

[serializable]

[xmlroot("document")]

public class orderentity

}

2) orderevent單據型別(事件)描述實體

/// /// 單據型別(事件)描述資訊

///

[serializable]

public class orderevent

/// /// 庫存動作

///

[xmlattribute("mainaction")]

public string mainaction

/// /// 單據明細項

///

[xmlarray("datafield"), xmlarrayitem("data")]

public orderdetail details

}

3)、資料明細類

/// /// 單據明細專案

///

[serializable]

public class orderdetail

[xmlattribute("actor")]

public string actor

[xmlattribute("actdate")]

public string actdate

[xmlattribute("corporderid")]

public string corporderid

[xmlattribute("fromcorpid")]

public string fromcorpid

[xmlattribute("tocorpid")]

public string tocorpid

[xmlattribute("ownerid")]

public string ownerid

}

4)序列化的實際**

#region 初始化訂單物件並完成序列化

orderentity result_file_object = new orderentity}};

program.serializertoxml(path + "\\" + filename, result_file_object);

#endregion

/// /// 把物件序列化成xml檔案

///

/// 物件的類

/// 輸出的檔案和路徑

/// 物件的例項

public static void serializertoxml(string outfile, t t) where t : class

}

MongoDB實戰經驗分享

nosql並不是no sql,而是指not only sql。nosql的出現是為了彌補sql資料庫因為事務等機制帶來的對海量資料 高併發請求的處理的效能上的欠缺。nosql不是為了替代sql而出現的,它是一種替補方案,而不是解決方案的首選。絕大多數的nosql產品都是基於大記憶體和高效能隨機讀寫的...

微服務實戰經驗分享

在過去的幾個月裡,我們已經聽到很多關於微服務的優缺點了。微服務真的只是soa嗎?微服務確實有助於進行複雜系統架構嗎?不論大家怎麼說,有一些公司已經轉向或正準備轉向基於微服務的方法了。他們在實踐過程中分享自己獲得的正面或負面的經驗,是很自然的事。最近,droplet公司的tom livesey分享了他...

FPGA系統設計實戰經驗分享 硬體篇

產品,或者實驗室的師兄們都用那個公司的產品多一些等等。如果自己對那個公司的產品比較熟悉,還是不要輕易更換。因為學習軟體和了解晶元結構還是需要一些時間的,而且也會引入一些設計風險。人一般會有慣性的思維的,往往會把一些經驗帶到新的專案中,而實際上不同廠商的晶元在設計細節方面還是有些不同的,對這個公司的晶...