簡體   English   中英

C#從不同節點反序列化XML

[英]c# deserialize xml from different node

我有一個看起來像這樣的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中,我只希望正文標記內的部分。 我使用XmlSerializer和注釋進行反序列化。 所以我有這樣的模型

[XmlRoot("Body")]
    public class BodyXml
    {
        public BodyXml()
        {}

        [XmlElement("Person")]
        public Person[] Persons { get; set; }
    }

現在我的問題是如何從正文標簽而不是從地址標簽中獲取XmlSerializer進行序列化? 我的模型中是否需要其他注釋?

謝謝和問候

根據其他約束,可以考慮編寫一個快速而骯臟的包裝器,該包裝器將反序列化整個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);
}

編輯:沒有任何上下文,我會去后者。

使用XmlIgnoreAttribute

您可以如下添加地址屬性

[XmlIgnoreAttribute]
public AddressClass Adress{get;set;}

在這里,AddressClass可以是您的Address屬性或其他一些類的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM