1

子クラスを 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 無視属性を追加しようとすると、指定していないかのように xml と属性が次のようになります。

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

[IgnoreDataMember]も試してみましたが、結果は同じです。

MVC/Web API でこれを開始しようとしていますが、可能であれば WCF にも適用できるようにしたいと考えています。

どんな方向でも役に立ちます。前もって感謝します。

4

0 に答える 0