У меня есть такой класс:
[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
объявлен как MessageBodyMember
в типе ответа OperationContract
.
Клиент ASMX НЕ ожидает Description
в сообщении XML. Поэтому я попытался скрыть (используя оператор new
) свойство Description
в производном классе и применил к нему XmlIgnoreAttribute
. Но все же он сериализует это свойство.
(Обратите внимание, что объявление переменной description
. Я не знаю, почему разработчик снова объявил производный класс, оставив его protected
в самом базовом классе.)
Как я могу игнорировать свойство базового класса в производном классе при использовании XmlSerializer? Я не могу игнорировать это в базовом классе, так как это нужно другим подтипам Structure
.