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)
如果使用的是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成员.