NullReferenceException при чтении XML-файла с помощью Linq (C # 4.0) - PullRequest
0 голосов
/ 13 декабря 2010

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

Это код для синтаксического анализа 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;

Path2UserFile также указывает на правильный файл, и я попросил его записать полный путь.

У него есть NullReferenceException всякий раз, когда он пытается проанализировать содержимое любого из элементов

Файл XML следует этому формату

<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>sampleuser@gmail.com</Email_adddress>
</User>

Класс UserType выглядит следующим образом

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

Понятия не имею, что не так, любая помощь будет очень признательна

1 Ответ

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

Измените все ссылки UserDoc на UserRoot (те, что после объявления UserRoot).Поскольку объект является XDocument, а не XElement, вам нужно работать на этом уровне.В противном случае вы можете ссылаться на UserDoc.Root.Element(...) вместо этого, но это длиннее.

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;

Кроме того, будьте в курсе вашего дела.Используйте BirthDate вместо Birthdate (заглавная "D", чтобы соответствовать вашему XML).Аналогично, это Email_address, а не Email_Address (строчная буква "a"), и ваш XML содержит 3 D в "адресе" (орфографическая ошибка).

...