Ссылка на объект не установлена ​​для экземпляра объекта - LINQ - PullRequest
0 голосов
/ 30 июля 2011

Я в полном недоумении. Я получаю «Ссылка на объект не установлена ​​на экземпляр объекта». ошибка - но я не могу понять, почему. Вот код, который у меня есть:

        public class PlayerProfile
    {
        public List<Profile> PlayerINfo = new List<Profile>();


        public void LoadProfiles(string path)
        {
            XDocument xmlDoc = XDocument.Load(path);
            PlayerINfo = new List<Profile>();

// This is where I get the error:
            PlayerINfo = (from profiles in xmlDoc.Root.Element("OnlineProfile").Elements("Player")
                              select new Profile
                              {
                                  Name = (string)profiles.Element("Name"),
                                  Sex = (string)profiles.Element("Sex"),
                                  Avatar = (string)profiles.Element("Avatar").Attribute("path") ?? "",
                                  Created = (DateTime)profiles.Element("Created")
                              }).ToList();


        }
    }

Вот мой класс профиля:

    public class Profile
{
    public string Name { get; set; }
    public string Sex { get; set; }
    public string Avatar { get; set; }
    public DateTime Created { get; set; }

}

РЕДАКТИРОВАТЬ - Добавление кода файла XML:

    <?xml version="1.0" encoding="utf-8"?>
<OnlineProfile>
  <Player>
    <Name>Stacey</Name>
    <Sex>Female</Sex>
    <Avatar path="/images/Picture.png" />
    <Ratio>
      <Win>0</Win>
      <Loss>0</Loss>
      <Abandoned>0</Abandoned>
    </Ratio>
    <Created>6/19/2011</Created>
  </Player>

</OnlineProfile>

Ответы [ 3 ]

4 голосов
/ 30 июля 2011
from profiles in xmlDoc.Root.Element("OnlineProfile").Elements("Player")

Это проблема - OnlineProfile - это ваш корневой элемент, просто сделайте

from profiles in xmlDoc.Root.Elements("Player")
1 голос
/ 30 июля 2011

Сделайте это: from profiles in xmlDoc.Element("OnlineProfile").Elements("Player") вместо profiles in xmlDoc.Root.Element("OnlineProfile").Elements("Player")

Из XML-файла, который вы разместили "OnlineProfile", это ваш корневой элемент, поэтому ожидаемых дочерних элементов там нет.

0 голосов
/ 30 июля 2011

Попробовал + решил в визуальной студии.Я вижу, что люди выше избили меня до этого.Еще один способ добиться этого:

xmlDoc.Element("OnlineProfile").Elements("Player")

Это то, что я опубликовал до того, как станет доступен Xml ...

вот хороший кандидат на эту ошибку

 (string)profiles.Element("Avatar").Attribute("...

"). Атрибут может вызвать ошибку. Вам нужно проверить на нулевое значение.

Например,

   = profiles.Element("Avatar") != null ? (string)profiles.Element("Avatar").Attribute("... : null;

действительно ли у вас есть элемент с именем Avatar в вашем Xml-файле.Правильно ли загружен файл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...