私はこのようなクラスがあります:以下のようなXmlSerializerの使用中に派生クラスの基本クラスのプロパティを無視する方法はありますか
[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;
}
}
}
別のクラスは、1を超える継承:
[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サービスを移行しています。だからDataContractSerializer
の代わりにXmlSerializer
を使用する必要があります。
応答タイプがOperationContract
の場合、OrgStructure
はMessageBodyMember
と宣言されています。
ASMXクライアントはは、XMLメッセージにDescription
を期待していません。そこで、派生クラスのDescription
プロパティを非表示にして(new
演算子を使用)、XmlIgnoreAttribute
を適用しようとしました。しかし、それはまだこのプロパティをシリアル化します。
(description
変数の宣言ことに注意してください。開発者は、基本クラス自体にprotected
それを維持する代わりに、再び派生クラスを宣言した理由を私は知らない。)
どのように私はベースのプロパティを無視することができますXmlSerializerを使用している間、派生クラスのクラス? Structure
の他のサブタイプはそれを必要とするので、私は基本クラスでそれを無視することはできません。基底クラスに
OrgDeptIDは、スタックオーバーフロー、BTW-typoですか? –
@Marc:あなたの質問に( 'OrgDeptID is stackoverflow'は)得られませんでした。私はここでコード全体をコピーしていない。シナリオをシミュレートするためにここにプロパティのカップルを書きました。 – Learner
OrgStructure.description(field)は決して使用されません。それを捨てる。 –