Date: 08.02.2017 11:51:14
"Я создал ещё более простую по структуре XML'ку:"
Так не работает. Десериализация, в отличие от парсера, кушает только XML строго определенной структуры. Например:
<?xml version="1.0"?> <PrintEngine xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ProgramDirectory>C:\Program Files (x86)\Foxit Software\Foxit Reader</ProgramDirectory> <ProgramFilename>FoxitReader.exe</ProgramFilename> <TimeWait>500</TimeWait> </PrintEngine>
для класса
[Serializable] public class PrintEngine { public string ProgramDirectory { get { return program_directory; } set { program_directory = value; } } public string ProgramFilename { get { return program_filename; } set { program_filename = value; } } public int TimeWait { get { return time_wait; } set { time_wait = value; } } }
Date: 09.02.2017 7:39:11
А, не увидел что вы создаете сериализатор для списка а скармливаете ему одиночный элемент.
В конструкторе XmlSerializer надо передавать тот тип, который десериализуется. Чтобы работать со списком, его надо заверенуть в класс и работать уже с этим классом.
Date: 09.02.2017 9:22:26
вот это неправильно:
XmlSerializer serializer = new XmlSerializer(typeof(List<Employee>)); Employee DE = (Employee)serializer.Deserialize(reader);надо
XmlSerializer serializer = new XmlSerializer(typeof(Employee)); Employee DE = (Employee)serializer.Deserialize(reader);
Date: 09.02.2017 10:48:04
Во-первых, компилятор не ругался потому что контроль типа сериализатор делает на этапе выполнения
Во-вторых, разница в том, что List<Employee> это список (точнее, динамический массив) объектов, а Emploee - одиночный объект, т.е. типы разные. Сериализатор обрабатывает только тот тип, который указать при его создании.
В-третьих, для вашей исходной задачи десериализация, в общем-то, не нужна. Вы можете ее решить также оперируя классом XElement.
Автор: VadimTagil