XML序列化與REST WCF Data Contract匹配時遇到的2個問題

問題一程序員

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未果的時候,該怎麼辦呢?經驗和知識是你的救命稻草。技術是一個不斷髮展的事物,要求每個技術人員終身學習的職業,學習應該成爲程序員血液中的一份子!與各位技術戰線的兄弟共勉。

相關文章
相關標籤/搜索