C# 将嵌套XML反序列化到类中

C# 将嵌套XML反序列化到类中,c#,xml,deserialization,C#,Xml,Deserialization,我有以下XML: <Root> <EventSet> <Event> <id>12345</id> <rant> <localTime> <dst>true</dst> <time>7/2/2012 14:30</time>

我有以下XML:

<Root>
   <EventSet>
      <Event>
         <id>12345</id>
         <rant>
            <localTime>
               <dst>true</dst>
               <time>7/2/2012 14:30</time>
            </localtime>
            <randomRant>
               <random>to illustrate point</random>
               <rant>help me!</rant>
            </randomRant>
         </rant>
      </Event>
      <Event>/*another event*/</Event>
      <Event>/*another event*/</Event> //etc
   </EventSet>
</Root>
还是有更好的方法


编辑:给定的
事件
只有一个
id
,还有一个
rant
。为了回答我的问题,假设我的类型是有效的。我希望将嵌套的XML反序列化为对象。

您给出的示例对我来说很好。 至于时间值,您的示例中的日期格式与xsd:dateTime不兼容,因此您不能仅执行此操作

public DateTime time { get; set; }
这将不会被序列化。尽管可以使用自定义XmlSerializer解决此问题,但更简单的方法是使用:

[XmlIgnore]
public DateTime _time {
    get { return DateTime.ParseExact(this.time, "MM/dd/YYYY HH:mm", CultureInfo.InvariantCulture);} // or use some specific culture here.
}

[XmlElement]
public string time { get; set; }
更新:
公共列表事件
将反序列化为:

<events>
    <Event></Event>
    <Event></Event>
    <Event></Event>
</events>

您可以将其设置为:

[XmlElement("Event")]
public List<Event> events {get; set}
[XmlElement(“事件”)]
公共列表事件{get;set}
它将被序列化为

    <Event></Event>
    <Event></Event>
    <Event></Event>

没有包装

或者,使用:

[XmlArray("EventSet")]
[XmlArrayItem("Event")]
public List<Event> events {get; set}
[XmlArray(“事件集”)]
[XmlArrayItem(“事件”)]
公共列表事件{get;set}
将按照示例中所述进行序列化

<EventSet>
    <Event></Event>
    <Event></Event>
</EventSet>

当然还有根元素:

[XmlRoot("Root")]
public class RootElement{
    [XmlArray("EventSet")]
    [XmlArrayItem("Event")]
    public List<Event> events {get; set}
}
[XmlRoot(“根”)]
公共类根元素{
[XmlArray(“事件集”)]
[XmlArrayItem(“事件”)]
公共列表事件{get;set}
}

是localTime和utcTime数组还是单个值?我不确定您的问题是什么。您是否正在尝试以本地和UTC两种格式存储单个日期时间?或者这两个日期时间代表不同的值(不仅仅是时区差异)?ErickI更改了我的XML。与
DateTime
格式无关。我想知道如何从带有嵌套标记的XML反序列化为对象。我使用了一种专有的时间格式,并对其进行了推广。我希望通过嵌套标记将XML反序列化为对象。为了回答我的问题,让我们假设一切都是有效的。好的,我刚刚用一些关于如何反序列化数组元素的示例更新了答案。除了数组,您的代码似乎可以反序列化此xml。
<EventSet>
    <Event></Event>
    <Event></Event>
</EventSet>
[XmlRoot("Root")]
public class RootElement{
    [XmlArray("EventSet")]
    [XmlArrayItem("Event")]
    public List<Event> events {get; set}
}