0

Ich bin völlig ratlos, ich habe sehr ähnlichen Code zuvor verwendet und es funktionierte perfekt, das XML in diesem wurde von einer separaten Methode in diesem Programm geschrieben und ich habe es überprüft dagegen und es sahNullReferenceException beim Lesen XML-Datei mit Linq (C# 4.0)

fein, dass für das Parsen von XML-Datei

UserType CurrentUser = new UserType(); 
XDocument UserDoc = XDocument.Load(Path2UserFile); 

XElement UserRoot = UserDoc.Element("User"); 
CurrentUser.User_ID = int.Parse(UserDoc.Element("User_ID").Value); 
CurrentUser.Full_Name = UserDoc.Element("Full_Name").Value; 
CurrentUser.Gender = UserDoc.Element("Gender").Value; 
CurrentUser.BirthDate = DateTime.Parse(UserDoc.Element("Birthdate").Value); 
CurrentUser.PersonType = int.Parse(UserDoc.Element("PersonType").Value); 
CurrentUser.Username = UserDoc.Element("Username").Value; 
CurrentUser.Password = UserDoc.Element("Password").Value; 
CurrentUser.Email_Address = UserDoc.Element("Email_Address").Value; 

die Path2UserFile Punkte auf die richtige Datei als auch den Code ist, und ich hatte es den vollständigen Pfad auszuschreiben.

Es hat eine Nullreferenceexception, wenn sie den Inhalt eines der Elemente

Die XML-Datei dieses Format

<User> 
    <User_ID>11</User_ID> 
    <Full_Name>Sample User</Full_Name> 
    <Gender>Male</Gender> 
    <BirthDate>12/12/2010 12:00:00 AM</BirthDate> 
    <PersonType>2</PersonType> 
    <Username>Sample User</Username> 
    <Password>sample123</Password> 
    <Email_adddress>[email protected]</Email_adddress> 
</User> 

Die UserType Klasse wie dieses

class UserType 
{ 
     public int User_ID = 0; 
     public string Full_Name = string.Empty; 
     public string Gender = string.Empty; 
     public DateTime BirthDate; 
     public int PersonType = 0; 
     public string Username = string.Empty; 
     public string Password = string.Empty; 
     public string Email_Address = string.Empty; 
} 
sieht folgendermaßen zu analysieren versucht,

Ich habe keine Ahnung, was falsch ist, jede Hilfe würde sehr geschätzt werden

Antwort

2

Ändern Sie alle UserDoc Referenzen auf UserRoot (die nach der UserRoot Deklaration). Da das Objekt ein XDocument und nicht ein XElement ist, müssen Sie auf dieser Ebene arbeiten. Ansonsten können Sie stattdessen auf UserDoc.Root.Element(...) verweisen, aber das ist länger.

UserType CurrentUser = new UserType(); 
XDocument UserDoc = XDocument.Load(Path2UserFile); 

XElement UserRoot = UserDoc.Root; 
CurrentUser.User_ID = int.Parse(UserRoot.Element("User_ID").Value); 
CurrentUser.Full_Name = UserRoot.Element("Full_Name").Value; 
CurrentUser.Gender = UserRoot.Element("Gender").Value; 
CurrentUser.BirthDate = DateTime.Parse(UserRoot.Element("BirthDate").Value); 
CurrentUser.PersonType = int.Parse(UserRoot.Element("PersonType").Value); 
CurrentUser.Username = UserRoot.Element("Username").Value; 
CurrentUser.Password = UserRoot.Element("Password").Value; 
CurrentUser.Email_Address = UserRoot.Element("Email_address").Value; 

Beachten Sie auch Ihren Fall. Verwenden Sie BirthDate anstelle von Birthdate (Großbuchstabe "D", um Ihre XML zu entsprechen). Ähnlich ist es Email_address nicht Email_Address (Kleinbuchstaben "a") und Ihr XML hat 3 D's in "Adresse" (Rechtschreibfehler).

+0

Ich wusste, es war etwas wirklich wirklich dumm, danke –

+0

@Indebi kein Problem. Bitte lesen Sie meine Antwort noch einmal. Ich habe auf einige andere Probleme hingewiesen, seit Ihr Kommentar gemacht wurde. –

Verwandte Themen