2

私はこのようなクラスを持っています:

[Serializable]
    public class Structure
    {
        #region Constants and Fields

        /// <summary>
        /// The description.
        /// </summary>
        private string description;


        #endregion


        /// <summary>
        ///   Gets or sets the Description of the subclass i.e subtype of structure
        /// </summary>
        public string Description
        {
            get
            {
                return this.description;
            }

            set
            {
                this.description = value;
            }
        }
}

以下のような別のクラスは、上記のクラスを継承します。

[XmlRoot(Namespace = "TestNamespace", ElementName = "OrgStructure")]
    public class OrgStructure : Structure
    {


        private long orgDeptID;

        /// <summary>
        ///   The description
        /// </summary>
        private string description;

  public long OrgDeptID
        {
            get
            {
                return this.orgDeptID;
            }

            set
            {
                this.orgDeptID= value;

            }
        }
}

ASMX サービスを WCF に移行して、既存の ASMX クライアントとの互換性を維持しています。したがって、のXmlSerializer代わりにを使用する必要がありDataContractSerializerます。

は、 の応答タイプの ようにOrgStructure宣言されます。MessageBodyMemberOperationContract

ASMX クライアントは、XML メッセージ内の を想定していません。Descriptionそこで、派生クラスnewのプロパティを(演算子を使用して)非表示にして、それに適用しようとしました。それでも、このプロパティをシリアル化します。DescriptionXmlIgnoreAttribute

(変数の宣言に注意してください。開発者が、基底クラス自体descriptionに保持するのではなく、派生クラスを再度宣言した理由はわかりません。)protected

XmlSerializer を使用しているときに、派生クラスで基本クラスのプロパティを無視するにはどうすればよいですか? Structure他のサブタイプがそれを必要とするため、基本クラスでそれを無視することはできません。

4

1 に答える 1

3

基本クラスに、以下を追加します。

public virtual bool ShouldSerializeDescription() { return true; }

派生クラスに、次を追加します。

public override bool ShouldSerializeDescription() { return false; }

これは認識できるパターンですがXmlSerializer、メンバー()と同じレベルで宣言Descriptionする必要があるため、作成する必要がありvirtualます。

それが目を不快にする場合は、いくつか追加してください:

[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]

それに-しかし、それは機能する必要がありますpublic

于 2011-07-12T12:23:53.583 に答える