0

Je suis complètement perplexe, j'ai déjà utilisé un code très similaire auparavant et cela a fonctionné parfaitement, le XML dans ce document a été écrit par une méthode séparée dans ce programme et je l'ai vérifié contre elle et il avait l'air bienNullReferenceException lors de la lecture de fichier XML avec Linq (C# 4.0)

C'est le code pour analyser le fichier XML

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; 

les Path2UserFile points du fichier correct aussi bien, et je l'avais écrit sur le chemin complet.

Il a une NullReferenceException chaque fois qu'il tente d'analyser le contenu de l'un des éléments

Le fichier XML suit ce 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> 

La classe UserType ressemble à ceci

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; 
} 

Je n'ai aucune idée de ce qui ne va pas, toute aide serait très appréciée

Répondre

2

Remplacez toutes les références UserDoc par UserRoot (celles qui suivent la déclaration UserRoot). Puisque l'objet est un XDocument plutôt qu'un XElement, vous devez opérer à ce niveau. Sinon, vous pouvez vous référer à UserDoc.Root.Element(...) à la place, mais c'est plus long.

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; 

Soyez également attentif à votre cas. Utilisez BirthDate au lieu de Birthdate (majuscule "D" pour correspondre à votre XML). De même, c'est Email_address pas Email_Address (minuscule "a") et votre XML a 3 D dans "adresse" (faute d'orthographe).

+0

Je savais que c'était quelque chose de vraiment vraiment stupide, merci –

+0

@Indebi pas de problème. S'il vous plaît relire ma réponse aussi. J'ai signalé quelques autres problèmes depuis que votre commentaire a été fait. –