从XML文档加载数据在Windows Phone 7上使用XDocument时抛出NullReferenceException

时间:2010-12-16 23:53:32

标签: xml windows linq windows-phone-7

确定。因此,对于Windows Phone 7应用程序,请说我有以下XML文件

<Objects>
    <Object Property1=”Value1” Property2=”Value2”>
        <Property3>Value3</Property3>
    </Object>
    <Object Property1=”Value1” Property2=”Value2”>
        <Property3>Value3</Property3>
    </Object>
</Objects>

我有以下课程定义

public class myObject
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
    public string Property3 { get; set; }

    public myObject (string _property1, string _property2, string _property3)
    {
        this.Property1 = _property1
        this.Property1 = _property1
        this.Property1 = _property1
    }
}

然后我使用以下代码从XML文件加载数据并返回myObjects列表: -

var xdoc = XDocument.Load("myXMLFile.xml");
var result = from o in xdoc.Document.Descendants("Object")
                         select new myObject
                         {
                             Property1 = o.Element("Property1").Value,
                             Property2 = o.Element("Property2").Value,
                             Property3 = o.Element("Property3").Value,
                         };

return result.ToList<myObject>();

为什么返回NullReferenceException?我猜这是我的linq查询不太正确,因为文件正在使用XDocument.Load调用正常加载。

任何帮助都会很棒!

克里斯

2 个答案:

答案 0 :(得分:4)

对于你提供的xml结构,你需要一个像这样的linq查询:

var xdoc = XDocument.Load("myXMLFile.xml");
var result = from o in xdoc.Document.Descendants("Object")
     select new myObject
     {
         Property1 = o.Attribute("Property1").Value,
         Property2 = o.Attribute("Property2").Value,
         Property3 = o.Element("Property3").Value
     };

就像John所说,当元素或属性不存在时,o.Attribute(“attributeName”)或o.Element(“elementName”)将抛出NullReferenceException。

答案 1 :(得分:0)

Property1 = o.Element("Property1").Value

在针对没有“o”元素的“Property1”运行时会抛出NullReferenceException! Element方法将返回null