我对这一点感到非常难过。我得到一个“对象引用未设置为对象的实例”。错误 - 但我无法弄清楚原因。这是我的代码:
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>
答案 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的元素吗?文件是否正确加载?