LINQ不将对象引用设置为对象的实例

时间:2011-07-30 04:50:20

标签: c# wpf linq

我对这一点感到非常难过。我得到一个“对象引用未设置为对象的实例”。错误 - 但我无法弄清楚原因。这是我的代码:

        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 个答案:

答案 0 :(得分:4)

from profiles in xmlDoc.Root.Element("OnlineProfile").Elements("Player")

这就是问题 - OnlineProfile 你的根元素,只是做

from profiles in xmlDoc.Root.Elements("Player")

答案 1 :(得分:1)

执行此操作:from profiles in xmlDoc.Element("OnlineProfile").Elements("Player")而不是profiles in xmlDoc.Root.Element("OnlineProfile").Elements("Player")

您发布的XML“OnlineProfile”是您的Root元素,因此您期望的子元素不在那里。

答案 2 :(得分:0)

尝试了这个+在视觉工作室解决了这个问题。我看到上面的人打败了我。实现这一目标的另一种方法是:

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

这是我在Xml becomming之前发布的内容......

这是错误的好候选人

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

“)。属性会导致错误。您需要检查是否为空。

e.g。

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

你的Xml文件中肯定有一个名为Avatar的元素吗?文件是否正确加载?