參考文:http://goo.gl/Qm5zX
=======================================================
這一樣的層級概念,因觀念錯誤,我試了很久才試出來,
要呈現此架構,在於它ebAcctListInqRs Class 集合的宣告方式
而不是額外再宣告一個 REQBDY Class 後,再宣告一個List<BDYREC > BDYRECs
================================
正確版
================================
宣告法: [XmlArray("REQBDY"), XmlArrayItem(typeof(BDYREC), ElementName = "BDYREC")]
[Serializable, XmlRoot("ebAcctListInqRs", Namespace = "http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/BSMF/ebAcctListInqRs/01")] public class ebAcctListInqRs { private REQHDR _REQHDR = new REQHDR(); //private REQBDY _REQBDY = new REQBDY(); private RESTLR _RESTLR = new RESTLR(); [XmlElement("REQHDR",Namespace = "http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/BSMF/ebAcctListInqRs/01")] public REQHDR REQHDR { get { return _REQHDR; } set { _REQHDR = value; } } [XmlArray("REQBDY"), XmlArrayItem(typeof(BDYREC), ElementName = "BDYREC")] public ListBDYRECs { get; set; } [XmlElement("RESTLR", Namespace = "http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/BSMF/ebAcctListInqRs/01")] public RESTLR RESTLR { get { return _RESTLR; } set { _RESTLR = value; } } }
============================================
錯誤寫法
============================================
[Serializable, XmlRoot("ebAcctListInqRs", Namespace = "http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/BSMF/ebAcctListInqRs/01")] public class ebAcctListInqRs { private REQHDR _REQHDR = new REQHDR(); private REQBDY _REQBDY = new REQBDY(); private RESTLR _RESTLR = new RESTLR(); [XmlElement("REQHDR",Namespace = "http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/BSMF/ebAcctListInqRs/01")] public REQHDR REQHDR { get { return _REQHDR; } set { _REQHDR = value; } } [XmlElement("REQBDY", Namespace = "http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/BSMF/ebAcctListInqRs/01")] public REQBDY REQBDY { get { return _REQBDY; } set { _REQBDY = value; } } [XmlElement("RESTLR", Namespace = "http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/BSMF/ebAcctListInqRs/01")] public RESTLR RESTLR { get { return _RESTLR; } set { _RESTLR = value; } } }
再宣告出 REQBDY (以下寫法是無法gen出它下面的item的)
[Serializable, XmlRoot("REQBDY", Namespace = "http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/BSMF/ebAcctListInqRs/01")] public class REQBDY { private BDYREC _BDYREC; ////// BDYREC資訊列表 /// [XmlElement("BDYREC", Namespace = "http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/BSMF/ebAcctListInqRs/01")] public BDYREC BDYRECs { get { return _BDYREC; } set { _BDYREC = value; } } //[XmlArray("BDYRECList"), XmlArrayItem(typeof(BDYREC), ElementName = "BDYREC")] //public ListBDYRECs { get; set; } }
==========================================
Class 與 XML 間的互轉程式碼
==========================================
public static string ToXml(object Object, XmlSerializerNamespaces Namespace) { string result = string.Empty; XmlSerializer xml = null; StreamWriter writer = null; using (MemoryStream mstream = new MemoryStream()) { //寫入 xml = new XmlSerializer(Object.GetType()); writer = new StreamWriter(mstream, Encoding.UTF8); xml.Serialize(writer, Object, Namespace); writer.Flush(); //讀 mstream.Position = 0; StreamReader reader = new StreamReader(mstream); result = reader.ReadToEnd(); writer.Close(); reader.Close(); } return result; } public static object ToObject(XmlReader xmlReader,Type type) { object result = null; XmlSerializer xml = new XmlSerializer(type); result = xml.Deserialize(xmlReader); return result; }
0 意見 :
張貼留言