Я довольно новичок на этом веб-сайте, это мой первый вопрос. Я прочитал документацию, но извините заранее, если я заблокирую любой кодекс поведения. Зашел свой вопрос:C# Linq для XML: tag.descendants не позволяет допросить всех потомков
У меня есть XML-файл в потоке. Моя цель - получить атрибут «Имя», «Тип» и ключ или ключи (они были изменены по понятной причине).
<YourKey>
<Product_Key Name="eMbedded Visual C++ 4.0">
<Key ID="5" Type="Static Activation Key" ClaimedDate="">BBBBB-QW36D-DPT6T-BBBB-ZZZZZ</Key>
</Product_Key>
<Product_Key Name="Windows 10 Home">
<Key ID="1251" Type="Retail" ClaimedDate="1/25/2017">ZZZZZ-6GBG7-ZZZZZ-8JG23-FM47H</Key>
<Key ID="1251" Type="Retail" ClaimedDate="8/23/2016">FEFEF-FVD7K-EEEEF-BEBEB-VMHX7</Key>
<Key ID="1251" Type="Retail" ClaimedDate="4/28/2016">EEZZE-GYB6P-ZZZEE-R72PQ-EEEEZ</Key>
</Product_Key>
</YourKey>
Я создал класс для хранения данных
public class MsProduct
{
public string Name { get; set; }
public string Type { get; set; }
public List<string> key { get; set; }
}
И я создал список MsProduct
добавить каждые элементы из var list
(см после) к моему объекту.
Я создал запрос Linq, он компилируется без Key = (List<string>)keys
, но я получаю только значение Name, Type
пусто (у меня есть проверка, нет ли данных (т.е. == null), заменить его на "").
Когда я добавляю Key = (List<string>)keys
, система выдает «Исключение System.InvalidCastException».
вот мой запрос:
var productName = XDocument.Load(fileXml);
var list = from product in productName.Descendants("YourKey")
let name = product.Attribute("Name")
let type = product.Attribute("Type")
let keys = product.Elements("Key")
select new MsProduct
{
Name = (string)name,
Type = (string)type,
Key = (List<string>)keys
};
Кто-нибудь есть идеи, как запросить мой файл, чтобы заселить свой класс?
Заранее благодарен!
Тип - атрибут Ключа, а не продукта. Прокомментируйте эту строку и проверьте. Еще одна вещь: ваш XML недействителен. – A3006
Благодарим за быстрый ответ. XML поставляется непосредственно из Microsoft, это экспорт моего субстрата MSDN. Я не создал код;). На ключ ответил ответ, чуть ниже, теперь мне интересно, как получить «тип». –