这是我的示例XML:
<outbound>
<leg0 Code="aaa" RetCode="ccc"/>
<leg1 Code="bbb" RetCode="ddd"/>
</outbound>
是否有可能以某种方式使用XmlElement(我使用XmlSerializer)将leg0和leg1反序列化为一种对象类型?
我的对象看起来像那样:
public class FlightInfo
{
[XmlElement(ElementName = "outbound")]
public Outbound Outbound { get; set; }
}
public class Outbound
{
[XmlElement(ElementName = "leg")]
public List<Leg> Leg { get; set; }
}
public class Leg
{
[XmlAttribute(AttributeName = "Code")]
public string Code{ get; set; }
[XmlAttribute(AttributeName = "RetCode")]
public string ReturnCode{ get; set; }
}
我的问题是将leg0和leg1元素反序列化为Leg对象。任何人都可以给我一个暗示吗?
答案 0 :(得分:2)
每条腿都有不同的元素名称是这里的问题。如果有可能你可以做一些像:
<outbound>
<leg Index=0 Code="aaa" RetCode="ccc"/>
<leg Index=1 Code="bbb" RetCode="ddd"/>
</outbound>
问题就消失了。
如果你对这种格式感到困惑,你可以做一些&#34;预处理&#34;。搜索和替换&#34; legn&#34;用&#34;腿索引= \&#34; n \&#34;&#34;这将生成上面的格式,然后您可以反序列化。
你遇到的问题是,当C#序列化一个Leg
时,它需要知道要给出哪个节点名称 - 它将如何知道?你已经失去了索引。
答案 1 :(得分:0)
我认为您不能将不同的元素名称反序列化为同一属性。你可以做的是有一个单独的属性,可以加入两个列表,所以你有一个更简单的方法来访问它。如下所示(未经测试但应该有效):
公共类出站 {
[XmlElement(ElementName = "leg0")]
public List<Leg> leg0 { get; set; }
[XmlElement(ElementName = "leg1")]
public List<Leg> leg1 { get; set; }
[XmlIgnore] //You don't want to deserialize this property
public List<Leg> AllLegs {
get
{
return leg0.Join(leg1);
}
}
}