在我的项目中,我必须将Xml文档反序列化为类。文档看起来像这样(基本结构):
<Document>
<Ifno>Some info</Info>
<Client>
<CilientName>Name</ClientName>
<ClientAddress>Address</ClientAddress>
</Client>
<Shipper>
<ShipperName>Name</ShipperName>
<ShipperAddress>Address</ShipperAddress>
</Shipper>
</Document>
在我的代码中,我使用System.Xml.Serialization
,因此可以轻松添加XmlRoot
和XmlElement
属性以帮助进行deserlialisation。但我对这个ClientInfo
和ShipperInfo
节点有疑问。我目前的代码如下所示:
public class Document
{
[XmlElement("Ifno")]
public string Information {get;set;}
[XmlElement("Client")]
public Client client {get;set;}
[XmlElement("Shipper")]
public Shipper shipper{get;set;}
}
public class Client
{
[XmlElement("ClientName")]
public string Name{get;set;}
[XmlElement("ClientAddress")]
public string Addres{get;set;}
}
public class Shipper
{
[XmlElement("ShipperName")]
public string Name{get;set;}
[XmlElement("ShipperAddress")]
public string Addres{get;set;}
}
此代码没问题,它对我来说很合适。但正如您所看到的,我们不需要课程Shipper
和Client
我们可以将其替换为类Person
(仅示例名称)因为我们使用相同的属性。所以代码看起来像:
public class Document
{
[XmlElement("Ifno")]
public string Information {get;set;}
[XmlElement("Client")]
public Person client {get;set;}
[XmlElement("Shipper")]
public Person shipper{get;set;}
}
public class Person
{
[XmlElement( ? )]
public string Name{get;set;}
[XmlElement( ? )]
public string Addres{get;set;}
}
但我不知道如何命名属性来使其工作?
有2个想法,但不知道这是否可以编码。
首先在Attribute中添加一些验证
[XmlElement( parentName="Client" ? "ClientName" : "ShipperName"]
但我不知道如何检查父名称。
第二个想法也是父母的名字
[XmlElement(parentName + "Name")]
这应该是可能的,因为属性名称始终为parent + something
,但我不能这样做。
我100%确定这有简单的解决方案,但我不知道是什么。有任何想法吗 ?