C#序列化 - 忽略父类的属性

时间:2013-09-10 17:56:35

标签: c# xml serialization asp.net-web-api

将子类序列化为XML时是否可以忽略父类的属性?如果可能的话,我也想用JSON做这个,但是如果可行的话,我希望xml先工作。

例如,如果我有这样的基类:

    [Serializable]
    [DataContract]
    public abstract class BaseClass
    {
        protected string _correlationID;
        private bool _isValid;

        /// <summary>
        /// get/set the correlation id
        /// </summary>
        [DataMember]
        public virtual string CorrelationID
        {
            get{ return _correlationID; }
            set{ _correlationID = value; }
        }

        /// <summary>
        /// get/set IsValid
        /// </summary>
        [DataMember]
        public virtual bool IsValid 
        {
            get { return _isValid; }
            set { _isValid = value; }
        }
    }

和这样的子课

    [Serializable]
    [DataContract]
    public class MyClass : BaseClass
    {
        private int _objectId;
        private string _objectName;

        /// <summary>
        /// get/set the object id
        /// </summary>
        [DataMember]
        public int ObjectId 
        { 
            get { return _objectId; }
            set { _objectId = value; }
        }

        /// <summary>
        /// get/set the object name
        /// </summary>
        [DataMember]
        public int ObjectName 
        { 
            get { return _objectName; }
            set { _objectName = value; }
        }

        [XmlIgnore]
        public override string CorrelationID
        {
            get{ return _correlationID; }
            set{ _correlationID = value; }
        }       
    }

我希望将xml返回为:

<MyClass>
    <IsValid>true</IsValid>
    <ObjectId>5</ObjectId>
    <ObjectName>My Object</ObjectName>
</MyClass>

但是,如果我尝试覆盖虚拟属性并向其添加xml ignore属性,则xml就像我没有指定和属性一样:

<MyClass>
    <CorrelationID>12345678910</CorrelationID>
    <IsValid>true</IsValid>
    <ObjectId>5</ObjectId>
    <ObjectName>My Object</ObjectName>      
</MyClass>

我也尝试过使用[IgnoreDataMember],但结果却是一样的。

我试图在MVC / Web API中启动它,但我希望它也适用于WCF。如果可能的话。

任何方向都会有所帮助。提前谢谢。

0 个答案:

没有答案