C# десериализует XML в коллекцию с уникальным ключом, где ключ берется из атрибута XML " id”
Приведенный ниже код в настоящее время работает и загружает XML в структуру класса. Эта структура состоит из коллекции элементов (items), каждый из которых имеет фиксированные свойства, и коллекции, которую я использую для переменного числа свойств.
Две вещи, которые я хочу сделать: 1) я хочу изменить список на что-то, что имеет уникальный ключ. Я попробовал словарь, но он не сработал, может быть, хэш-набор...2) ключ для коллекции должен управляться XML-атрибутом элемента "id".
Я не могу до конца понять это, и попытка скопировать шаблон KVP, который я использовал для переменных параметров элементов, не работает. Он добавляет элементы в "элементы", но все они пусты, и хэш для коллекции не заполняется.
Помогите пожалуйста
ПС. Похоже пометки разделов текста как C# и XML не работает.
[XmlRoot ("ItemsContainer")]
элементы публичного класса
{
[XmlAttribute ("Версия")]
public string Version { get; set; }
[XmlArray ("Items")]
[XmlArrayItem ("Item")]
public List & lt;item> items = new List< item> (); / / TODO-ключ в этой коллекции должен быть уникальным и управляться из XML-атрибута элемента "Id"
общественности статической нагрузки элементы(строку пути)
{
var xml = ресурсы.Загрузить & lt;textasset> (путь);
ВАР сериализатор = новый сериализатор XmlSerializer(typeof на (пункты));
var reader = новый StringReader(xml. text);
var items = (Items) сериализатор.Десериализация (читатель);
читатель.Закрывать();
возврат товаров;
}
}
предмет открытого класса
{
// # # # Фиксированные Параметры Элемента
[XmlAttribute ("Id")]
public int Id { get; set; }
[XmlElement ("Имя")]
public string Name { get; set; }
[XmlElement ("Описание")]
публичное строковое описание { get; set; }
[XmlElement ("Значение")]
public float Value { get; set; }
// # # # Переменные параметры элемента как пары ключевых значений.
[XmlArray ("KVPS")]
[XmlArrayItem ("KVP")]
общественная список<KeyValuePair&ЛТ;строку, строку&ГТ;&ГТ; KVPS { получить; набор; } //мы будем иметь случаев мы не хотим, чтобы уникальные ключи
}
[Упорядочиваемый]
публичный класс KVP< K, V>
{
открытый ключ K { get; set; }
public V Value { get; set; }
общественный КВП()
{
}
открытый KVP(K ключ, V значение)
{
Ключ = ключ;
Value = значение;
}
}
Вот связанный XML
& lt;?xml version=" 1.0 "encoding=" utf-8"?>
<ItemsContainer Version= "1.0">
< предметы>
< Item Id= "100">
<имя & gt;Бургер
< описание & gt;прекрасный дегустационный Биг-Мак
< значение> 5.67
< Item Id= "101">
< имя & gt;Саммич
< описание & gt;ветчина и сыр
< значение & gt;2.80
< Item Id= "102">
< имя & gt;Карлинг
< описание> Пинта карлинга
< значение & gt;2.80
< kvps>
< kvp>
< ключ & gt;alchohol
& lt;значение> 3.9
< kvp>
< ключ & gt;alchohol
& lt;значение> 4.9
< kvp>
< ключ & gt;alchohol
& lt;значение> 5.9
Что я уже пробовал:
Я не могу до конца понять это, и попытка скопировать шаблон KVP, который я использовал для переменных параметров элементов, не работает. Он добавляет элементы в "элементы", но все они пусты, и хэш для коллекции не заполняется.