我想指定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>
最佳答案
如果您使用的是带有默认(非XmlSerializer
)序列化的IXmlSerializable
,那么实际上:如果不添加一个额外的类AlertOne
,带有一个属性和一个[XmlText]
值,就无法实现这一点。
如果实现IXmlSerializable
,则应该可行,但这不是一个健壮的实现的好接口(interface)(特别是反序列化很难;如果仅写,则应该可以)。我个人建议使用上述额外的类映射到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; }
}
您当然可以添加一些与内部实例通信的
[XmlIgnore]
直通成员。