問題一:程序員
XML序列化與RESTful WCF Data Contract不能匹配,沒法傳遞類的值。學習
現象:spa
給類加上[Serializable]Attribute,能夠成功序列化,可是WCF Service不能識別。發現XML序列化與WCF Data Contract中成員的順序必須相同。code
解決方案:對象
1.類的頭部清空WCF Data Contract的默認命名空間(見代碼)。blog
2.全部元素加上XML序列化和WCF DataMember的Order(見代碼),包括被調用的類。get
using System; using System.Collections.Generic; using System.Runtime.Serialization; using System.Xml.Serialization; namespace MySchool.BLL.Model.Common.User { [Serializable] [DataContract(Namespace = "")] public sealed class User { [DataMember(Order = 1)] [XmlElement(Order = 1)] public int id { get; set; } [DataMember(Order = 2)] [XmlElement(Order = 2)] public string userName { get; set; } [DataMember(Order = 3)] [XmlElement(Order = 3)] public string nickName { get; set; } //...... private Profile m_profile = null; [DataMember(Order = 8)] [XmlElement(Order = 8)] public Profile Profile { get { return m_profile; } set { m_profile = value; } } } [Serializable] [DataContract(Namespace="")] public sealed class Profile { [DataMember(Order = 1)] [XmlElement(Order = 1)] public int id { get; set; } [DataMember(Order = 2)] [XmlElement(Order = 2)] public int nation { get; set; } [DataMember(Order = 3)] [XmlElement(Order = 3)] public int gender { get; set; } //... } }
問題二:string
趕上List類型,WCF Service又不能識別。io
現象:class
XML序列化的對象,Service沒法識別。
解決方案:
給[XmlElement]Attribute加上List的完整Type(見代碼)。
[DataMember(Order = 11)] [XmlElement(Order = 11, Type = typeof(List<SchoolGradeClass>))] public List<SchoolGradeClass> SchoolGradeClassList { get; set; }
面對上面這些問題,當Google未果的時候,該怎麼辦呢?經驗和知識是你的救命稻草。技術是一個不斷髮展的事物,要求每個技術人員終身學習的職業,學習應該成爲程序員血液中的一份子!與各位技術戰線的兄弟共勉。