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

时间:2011-10-11 07:20:51

标签: c# xml serialization xml-serialization

我想指定XML可序列化类中的一个属性是类中另一个属性的属性,而不是类本身的属性。如果不创建其他类,这可能吗?

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

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

  public bool IsAlertOneEnabled { get; set; }
}

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

<Alerts>
  <AlertOne Enabled="True">99</AlertOne>
</Alerts>

1 个答案:

答案 0 :(得分:5)

如果您使用XmlSerializer默认(非IXmlSerializable)序列化,那么确实如此:如果不添加 {{1}的额外类,则无法实现},带有属性和AlertOne值。

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

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

合适的DTO布局示例:

IXmlSerializable

您当然可以添加一些与内部实例通信的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; } } pass-thru成员。