不包括要在派生类中序列化的数据成员

本文关键字:序列化 数据成员 派生 不包括 | 更新日期: 2023-09-27 18:13:39

我有以下类。我不想让派生类序列化"Name",但是,下面的代码似乎不起作用。如果我声明一个派生类的实例,"Name"属性仍然被序列化。

[DataContract]
public class Base
{
  [DataMember]
  public virtual string Name
  {get; set; }
}
[DataContract]
public class Derived: Base
{
   [IgnoreDataMember]
   public override string Name
   {get; set; }
}

不包括要在派生类中序列化的数据成员

如果在基类中声明属性virtual会怎样?然后在派生类

中重写它

尝试使用ScriptIgnore (json)或XmlIgnore (xml)属性,这取决于您要序列化的内容。这将防止该成员被序列化

如果你想尝试使用XmlSerializer这里是代码

public class Base
{
    [XmlIgnore]
    public virtual  string Name { get; set; }
}
public class Derived : Base
{
    [XmlIgnore] //Remove this to include
    public override string Name { get; set; }
}
MemoryStream memStream = new MemoryStream();
XmlSerializer xmlSer = new XmlSerializer(typeof(Derived));
xmlSer.Serialize(memStream, new Derived() { Name = "aaaa" });
MessageBox.Show(Encoding.UTF8.GetString(memStream.ToArray()));