如何指定一个属性是另一个属性C#XML序列化?

Ste*_*ane 6 c# xml serialization xml-serialization

我想指定XML可序列化类中的一个属性是类中另一个属性的属性,而不是类本身的属性.这可能不创建额外的类吗?

例如,如果我有以下C#类

class Alerts
{
  [XmlElement("AlertOne")]
  public int AlertOneParameter { get; set; }

  public bool IsAlertOneEnabled { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何指定IsAlertOneEnabled是AlertOne的属性,以便XML序列化为以下内容?

<Alerts>
  <AlertOne Enabled="True">99</AlertOne>
</Alerts>
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

如果使用的是XmlSerializer默认的(非IXmlSerializable)系列化,那么确实是:这不能无需添加额外的类实现AlertOne,有一个属性和[XmlText]值.

如果你实现IXmlSerializable它应该是可能的,但这不是一个很好的实现鲁棒的接口(反序列化,特别是,很难;如果它是只写的,那么这应该没问题).就个人而言,我建议使用上述额外课程映射到DTO模型.

LINQ-to-XML等其他工具当然会让它变得非常简单,但工作方式不同.

合适的DTO布局示例:

public class Alerts
{
    [XmlElement("AlertOne")]
    public Alert AlertOne { get; set; }
}
public class Alert
{
    [XmlText]
    public int Parameter { get; set; }
    [XmlAttribute("Enabled")]
    public bool Enabled { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

你当然可以添加一些[XmlIgnore]与内部实例对话的pass-thru成员.