2013-07-31 46 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)); 
    }     
} 
相關問題