NullReferenceException при сохранении XML-файла с помощью Linq - PullRequest
0 голосов
/ 12 декабря 2010

Я получаю исключение NullReferenceException в этой строке UserRoot.Element("User_ID").Value = User.User_ID.ToString();

Что именно я делаю не так?

Вот большая часть кода для этого метода

            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");

Спасибо

Я знаю, что сохранять имена пользователей и пароли в виде обычного текста невероятно небезопасно, но к нему будет обращаться только один процесс, который в конечном итоге обеспечит надежную защиту

Ответы [ 3 ]

2 голосов
/ 12 декабря 2010

Метод Element("User_ID") возвращает существующий элемент с именем <User_ID>, если есть.

Поскольку ваш элемент XML пуст, он возвращает ноль.

Вы должны создать свой XML следующим образом:

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),
        ...
    )
);

Кроме того, вы можете вызвать Add метод , чтобы добавить узел к существующему элементу.

2 голосов
/ 12 декабря 2010

Вы получаете эту ошибку, потому что в UserRoot нет элемента XML с именем User_ID для установки его значения.Если вы закомментируете это, вы получите ту же ошибку на следующей строке и так далее для каждого другого элемента, так как вы не добавили элементы с этими именами.Чтобы создать нужное дерево, попробуйте следующее:

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

Будет полезна следующая ссылка MSDN на Создание дерева XML с XElement .

0 голосов
/ 12 декабря 2010

Вы хотите проверить, является ли значение нулевым или пустым, прежде чем запускать методы для него.

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