最直接标准的方式是在属性上添加[XmlIgnore]特性;它仅对public成员生效,可彻底跳过序列化与反序列化,但无法运行时动态控制。
在 C# 中,使用 XmlSerializer 序列化对象为 XML 时,若想跳过某个属性不参与序列化,最直接、标准的方式就是在该属性上添加 [XmlIgnore] 特性。
只需在不想序列化的属性前标注 [XmlIgnore],XmlSerializer 在序列化和反序列化过程中都会自动跳过它:
public class Person
{
public string Name { get; set; }
[XmlIgnore]
public int Age { get; set; } // 不会出现在 XML 中
public string Email { get; set; }}
序列化后生成的 XML 将只包含 Name 和 Email,Age 完全被忽略。
XmlSerializer 默认只处理 public 的字段或属性。它不会序列化 private、protected 或 internal 成员,即使没加 [XmlIgnore]。所以:
private string _id;)无需加 [XmlIgnore],本来就不会被序列化[XmlIgnore] 加在 private 成员上没有实际效果(编译通过但无意义)
[XmlElement] 显式标记了某个 public 属性,再加 [XmlIgnore] 会覆盖前者,仍被忽略[XmlIgnore] 是编译期静态特性,不能在运行时开关。如果需要根据条件决定是否忽略某属性,有几种替代思路:
DataContractSerializer + [DataMember(EmitDefaultValue = false)] 配合逻辑控制值IXmlSerializable,完全自定义序列化逻辑别混淆这些特性:
[XmlIgnore]:彻底跳过该成员(序列化 & 反序列化都不处理)[XmlElement(IsNullable = true)]:仍参与序列化,只是允许值为 null
[DefaultValue(...)] + [XmlAttribute]:仅影响默认值省略行为,不等同于忽略[NonSerialized]:仅对 BinaryFormatter 有效,对 XmlSerializer 无效