我有一个xml文件,例如:
<?xml version="1.0" encoding="UTF-8"?>
<Adresses>
<Message>
<Header>
<MessageID>96</MessageID>
<Timestamp>22.08.2014 10:25:01</Timestamp>
</Header>
<Body>
<Person SurName="Muster" Prename="Max">
<Adress Street="Street 1"/>
</Person>
<Person SurName="Muster" Prename="Max">
<Adress Street="Street 1"/>
</Person>
<Person SurName="Muster" Prename="Max">
<Adress Street="Street 1"/>
</Person>
</Body>
</Message>
</Adresses>
从这个xml我只想要body标签内的部分。我使用XmlSerializer和annotaions进行反序列化。所以我的模型看起来像这样
[XmlRoot("Body")]
public class BodyXml
{
public BodyXml()
{}
[XmlElement("Person")]
public Person[] Persons { get; set; }
}
现在我的问题是如何让XmlSerializer从body-tag序列化而不是从adresses-tag序列化?我的模型中是否需要另外注释?
谢谢和问候
答案 0 :(得分:1)
根据其他约束,要么考虑编写一个快速且脏的包装器来反序列化整个XML(使用BodyXml
作为其成员),或者只选择xml的相关部分,例如:
var serializer = new XmlSerializer(typeof(BodyXml));
var xDoc = XDocument.Parse(YOUR_XML_STRING);
using (var xmlReader = xDoc.Descendants("Body").Single().CreateReader())
{
var result = serializer.Deserialize(xmlReader);
}
编辑:没有任何背景我会选择后者。
答案 1 :(得分:0)
使用XmlIgnoreAttribute
您可以添加地址属性,如下所示
[XmlIgnoreAttribute]
public AddressClass Adress{get;set;}
这里AddressClass可以输入你的Address属性或其他类。