Я пытаюсь Linq-to-XML, чтобы сократить мой код и сделать его более читаемым, но я столкнулся с ошибкой, когда я продолжаю получать нуль. Я пытаюсь сделать следующий код работу:Element extract return null
var listOfFoos = new List<FooItem>();
var xdoc = XDocument.Parse(fooData);
var fooNodes = xdoc.Descendants("Foo");
var foos = fooNodes.Select(f => new FooItem()
{
x = f.Element("X").Value,
y = float.Parse(f.Element("Y").Value),
z = int.Parse(f.Element("Z").Value)
});
foreach(var foo in foos)
{
listOfFoos.Add(foo);
}
Но когда я пытаюсь использовать foos
или открыть View Results в VS, я получаю ошибку пустую или «Объект не установлен для ссылки». Резервное копирование с Linq-на-XML, я написал следующий код, который работает прекрасно:
var listOfFoos = new List<FooItem>();
var xdoc = XDocument.Parse(fooData);
var foos = xdoc.Descendants("Foo").ToList();
foreach (var f in foos)
{
var foo = new FooItem();
foo.x = f.Element("X").Value;
foo.y = float.Parse(f.Element("Y").Value);
foo.z = int.Parse(f.Element("Z").Value);
listOfFoos.Add(s);
}
Так что же мешает XML Linq-на-от работы в то время как моя вторая реализация идет без сучка и задоринки?
XML-выглядит следующим образом:
<Foos>
<Foo>
<X>AFE3-JJ-WO2N-353E</X>
<Y>3341.3426661</Y>
<Z>10</Z>
</Foo>
<Foo>
<X>30IE-N2-IIS2-WER4</X>
<Y>154.558921</Y>
<Z>5</Z>
</Foo>
...
</Foos>
Это FooItem
класс:
public class FooItem
{
public string X { get; set; }
public float Y { get; set; }
public int Z { get; set; }
}
И трассировки стека я получаю ошибки:
"Object reference not set to an instance of the object."
at SigCaptureWeb.Controllers.HomeController.<RetrievePDF>b__1(XElement f) in c:\Users\ams\Documents\Visual Studio 2013\Projects\SigCapture\SigCaptureWeb\Controllers\HomeController.cs:line 101
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at SigCaptureWeb.Controllers.HomeController.RetrievePDF(String formCode, String dataXML) in c:\Users\ams\Documents\Visual Studio 2013\Projects\SigCapture\SigCaptureWeb\Controllers\HomeController.cs:line 108
Как выглядит XML? –
Добавил его, извините за то, что забыл положить его. –
Рассмотрите возможность публикации минимального, но полного образца, позволяющего воспроизвести полученную вами ошибку. –