У меня есть такой XML-файл: -
![XML file](https://i.stack.imgur.com/f28Fs.png)
Обратите внимание, что у каждого <Field></Field>
может быть свой элемент, например выделенный <I32>
или <String>
. Я хочу показать имя элемента в виде таблицы данных, например, это Type для имени элемента (или I32, или String, или другой дочерний элемент <Field>
): -
![Datagridview](https://i.stack.imgur.com/kaCGU.png)
Пока что я пробовал этот код, но он возвращает An unhandled exception of type 'System.NullReferenceException'
.
XDocument doc = XDocument.Load("GetLotDetails.xml");
var data = doc.Descendants("Document").Where(x => (String)x.Attribute("name") == "DATA").SelectMany(x => x.Elements("Field"));
var query = from d in data
let str = d.Element("String").Name
let other = d.Element("I32").Name
select new
{
Name = d.Attribute("name").Value,
Type = str.Equals("String") ? "String" : (other.Equals("I32") ? "I32" : null),
Value = d.Value,
};
dataGridView1.DataSource = query.ToList();
Итак, идея состоит в том, чтобы позволить анониму Type = *whatever element name under field*
. Как можно извлечь другое имя элемента в операторе выбора LINQ и присвоить его той же переменной неизвестного типа?