У меня есть такой класс:
[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
.
OrgDeptID is a stackoverflow
) твой вопрос. Я не копировал весь код здесь. Я только что написал пару свойств здесь, чтобы смоделировать сценарий. - person Learner   schedule 12.07.2011OrgDeptID
вызываетOrgDeptID
, который вызываетOrgDeptID
, который вызываетOrgDeptID
- должно бытьreturn orgDeptID
(обратите внимание на нижний регистрo
). Не критично, но на полсекунды сбил меня с толку. - person Marc Gravell   schedule 12.07.2011