У меня есть два класса, показанных ниже:
[Serializable]
[XmlInclude(typeof(SomeDerived))]
public class SomeBase
{
public string SomeProperty { get; set; }
}
public class SomeDerived : SomeBase
{
[XmlIgnore]
public new string SomeProperty { get; set; }
}
Когда я сериализуюсь и экземпляр SomeDerived
, я не ожидаю увидеть значение для SomeProperty
.Тем не менее, я делаю.Я пробовал другие подходы, такие как SomeProperty
, объявленный как virtual
в SomeBase
и переопределение его в SomeDerived
.Тем не менее я вижу это в сериализованном экземпляре SomeDerived
.
Может кто-нибудь объяснить, что происходит с XmlIgnoreAttribute
?
Для полноты, мой код десериализации ниже
class Program
{
static void Main(string[] args)
{
SomeDerived someDerived = new SomeDerived { SomeProperty = "foo" };
XmlSerializer ser = new XmlSerializer(typeof(SomeBase));
MemoryStream memStream = new MemoryStream();
XmlTextWriter xmlWriter = new XmlTextWriter(memStream, Encoding.Default);
ser.Serialize(memStream, someDerived);
xmlWriter.Close();
memStream.Close();
string xml = Encoding.Default.GetString(memStream.GetBuffer());
Console.WriteLine(xml);
Console.ReadLine();
}
}
Редактировать
Я получаю такое же поведение, если я изменяю объявление сериализатора на new XmlSerializer(typeof(SomeDerived))
.