C# 将嵌套XML反序列化到类中
我有以下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>
<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}
}