2013-07-31 96 views
0

我试图从XML读取DateTime对象并将它们加载到提醒对象列表中。DateTime.Parse抛出一个ArgumentNullException

Datetime.Parse与消息抛出Argument Null Exception

String引用不设置为一个字符串的一个实例。

这里是我的代码:

private void loadReminders() 
    { 
     var xml = File.ReadAllText("Reminders.xml"); 
     XmlReader xmlReader = XmlReader.Create(new StringReader(xml)); 
     while (xmlReader.Read()) 
     { 
      if (xmlReader.Name.Equals("Reminder") && (xmlReader.NodeType == XmlNodeType.Element)) 
      { 
       Reminders.Add(new Reminder(DateTime.Parse(xmlReader.GetAttribute("Time")), xmlReader.GetAttribute("Title"), xmlReader.GetAttribute("Message"))); 
      } 
     } 
    } 

我不明白为什么这个异常被抛出,因为时间字符串解析清楚地存储在XML文件中。

<Reminders> 
    <Reminder> 
    <Time>2013-7-30 23:24</Time> 
    <Title>Random Reminder</Title> 
    <Message>Random Message</Message> 
    </Reminder> 
</Reminders> 

任何帮助将不胜感激。

+3

时间你的XML是一个元素,而不是一个属性。 – dbugger

回答

1

如果你决定改变使用LINQ to XML代码,那么你可以使用此代码:

var listTimes = doc.Elements("Reminders").Elements("Reminder").Select(s => s.Element("Time")); 

foreach (var item in listTimes) 
{ 
    Console.Write(DateTime.Parse(item.Value, CultureInfo.InvariantCulture)); 
} 

与你当前的代码,你可以使用这样的事情:

XmlReader xmlReader = XmlReader.Create(new StringReader(xml)); 

while (xmlReader.Read()) 
{ 
    if (xmlReader.Name.Equals("Time") && (xmlReader.NodeType == XmlNodeType.Element)) 
    { 
     Console.WriteLine(DateTime.Parse((string)xmlReader.ReadElementContentAs(typeof(string), null), CultureInfo.InvariantCulture)); 
    }     
} 
相关问题