2010-12-12 67 views
0

Je continue de recevoir un NullReferenceException sur cette ligne UserRoot.Element("User_ID").Value = User.User_ID.ToString();NullReferenceException tout en économisant fichier XML avec LINQ

Qu'est-ce que exactement je fais mal?

Voici la majorité du code pour cette méthode

  if (File.Exists(Path2UserDB + User.User_ID.ToString() + ".db") == false) 
      { 
       File.Create(Path2UserDB + User.User_ID.ToString() + ".db"); 

      } 
      XElement UserRoot = new XElement("User"); 
      UserRoot.Element("User_ID").Value = User.User_ID.ToString(); 
      UserRoot.Element("Full_Name").Value = User.Full_Name; 
      UserRoot.Element("Gender").Value = User.Gender; 
      UserRoot.Element("BirthDate").Value = User.BirthDate.ToString(); 
      UserRoot.Element("PersonType").Value = User.PersonType.ToString(); 
      UserRoot.Element("Username").Value = User.Username; 
      UserRoot.Element("Password").Value = User.Password; 
      UserRoot.Element("Email_adddress").Value = User.Email_Address; 
      XDocument UserDoc = new XDocument(); 
      UserDoc.Save(Path2UserDB + User.User_ID.ToString() + ".db"); 

Merci

Je sais que sauver les noms d'utilisateur et mots de passe en texte clair est incroyablement dangereux, mais cela ne va être accessible par un processus que je vais éventuellement mettre en œuvre une sécurité forte

Répondre

2

La méthode Element("User_ID") retourne un élément existant nommé <User_ID>, le cas échéant.

Puisque votre élément XML est vide, il renvoie null.

Vous devez créer votre XML comme ceci:

var userDoc = new XDocument(
    new XElement("User", 
     new XElement("User_ID", User.User_ID), 
     new XElement("Full_Name", User.Full_Name), 
     new XElement("Gender", User.Gender), 
     ... 
    ) 
); 

Vous pouvez également appeler le Add method pour ajouter un nœud à un élément existant.

0

Vous voulez vérifier si la valeur est nulle ou vide avant d'exécuter des méthodes sur elle.

if(!String.IsnullorEmpty(User.User_ID)) 
     UserRoot.Element("User_ID").Value = User.User_ID.ToString(); 
+0

Je pense que le problème est que 'UserRoot.Element (" User_ID ")' est 'null', pas' User.User_ID ' – digEmAll

+0

Gotcha, bien qu'il devrait vérifier cela aussi –

2

Vous obtenez cette erreur, car il n'y a aucun élément XML appelé User_ID sous UserRoot pour définir sa valeur. Si vous commentez, vous obtiendrez la même erreur sur la ligne suivante et ainsi de suite pour tous les autres éléments, puisque vous n'avez pas ajouté d'éléments avec ces noms. Pour créer l'arbre que vous voulez, essayez ceci:

XElement UserRoot = 
    new XElement("User", 
     new XElement("User_ID", User.User_ID.ToString()), 
     new XElement("Full_Name", User.Full_Name), 
     new XElement("Gender", User.Gender), 
     new XElement("BirthDate", User.BirthDate.ToString()), 
     new XElement("PersonType", User.PersonType.ToString()), 
     new XElement("Username", User.Username), 
     new XElement("Password", User.Password), 
     new XElement("Email_adddress", User.Email_Address) 
    ); 

Le lien suivant MSDN sur XML Tree Creation with XElement sera utile.

+0

Vous et le gars ci-dessus ont raison, je serait case à cocher si je pouvais –

+0

@Indebi pas de problème; Au moment où j'ai posté ma solution, j'ai remarqué que Slaks avait déjà mis à jour sa réponse pour inclure le bon code, donc il devrait avoir la coche. Je suis heureux que tout a fonctionné pour vous si :) –