【问题标题】:c# deserialize xml from different nodec# 反序列化来自不同节点的xml
【发布时间】:2014-09-23 08:32:30
【问题描述】:

我有一个 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-tags 内的部分。我使用 XmlSerializer 和注释进行反序列化。所以我有看起来像这样的模型

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

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

现在我的问题是如何让 XmlSerializer 从 body-tag 而不是从 adresses-tag 序列化?我需要在模型中的某个地方添加另一个注释吗?

感谢和问候

【问题讨论】:

    标签: c# .net xml windows-runtime deserialization


    【解决方案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);
    }
    

    编辑:没有任何上下文我会选择后者。

    【讨论】:

      【解决方案2】:

      使用 XmlIgnoreAttribute

      您可以添加地址属性如下

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

      这里的 AddressClass 可能是您的 Address 属性或其他类的类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-05
        • 2022-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多