我想指定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>
答案 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成员。