.NET 4.x Сохранение списка объектов класса в ручную, сохранение в XML. Без сериализации. - C#
Формулировка задачи:
Здравствуйте! Хотел спросить. Как можно сохранить список объектов в XML файл вручную? Я сериализацией делаю так:
Класс, который будем сохранять и класс, который сериализовывает список объектов класса.
Вот я создаю объекты, добавляю их в список и сохраняю сериализацией в XML:
И получаю файл следующего вида:
Вот мне хотелось бы узнать как создать такой файл вручную, из списка? И как потом загрузить тоже в список. Я что-то вообще запутался. Особенно эта беда мне не совсем ясна, как сделать:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Serialization; using System.IO; namespace TestProgram { [Serializable] public enum Mode : byte { Single, Double, Decimal } [Serializable] public class TestObject { public int valueInt { get; set; } public String valueText { get; set; } public DateTime valueDateTime { get; set; } public Mode enumMode { get; set; } public TestObject() { } public TestObject(int valInt, String valText, DateTime valDateTime, Mode enumMode) { this.valueInt = valInt; this.valueText = valText; this.valueDateTime = valDateTime; this.enumMode = enumMode; } } public static class SaverLoader { public static void Save(List<TestObject> list, String FileName) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<TestObject>)); TextWriter textWriter = new StreamWriter(FileName); xmlSerializer.Serialize(textWriter, list); textWriter.Close(); } public static List<TestObject> Load(String FileName) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<TestObject>)); TextReader textReader = new StreamReader(FileName); List<TestObject> list = (List<TestObject>)xmlSerializer.Deserialize(textReader); textReader.Close(); return list; } } }
private void button1_Click(object sender, RoutedEventArgs e) { const int countObj = 3; List<TestObject> list = new List<TestObject>(countObj); Mode[] modes = new Mode[countObj] { Mode.Decimal, Mode.Double, Mode.Single }; for (int i = 0; i < countObj; i++) list.Add(new TestObject(i, "Привет " + i.ToString(), new DateTime(2010, 12, i + 1), modes[i])); String path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "SaveFile.xml"); SaverLoader.Save(list, path); }
<?xml version="1.0" encoding="utf-8"?> <ArrayOfTestObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <TestObject> <valueInt>0</valueInt> <valueText>Привет 0</valueText> <valueDateTime>2010-12-01T00:00:00</valueDateTime> <enumMode>Decimal</enumMode> </TestObject> <TestObject> <valueInt>1</valueInt> <valueText>Привет 1</valueText> <valueDateTime>2010-12-02T00:00:00</valueDateTime> <enumMode>Double</enumMode> </TestObject> <TestObject> <valueInt>2</valueInt> <valueText>Привет 2</valueText> <valueDateTime>2010-12-03T00:00:00</valueDateTime> <enumMode>Single</enumMode> </TestObject> </ArrayOfTestObject>
<ArrayOfTestObject> ...... </ArrayOfTestObject>
Вообще, хотябы узнать, как загружать такого вида список. Мне нужно это, чтобы в новой версии программы конвертировать сохранённые настройки в новый изменённый класс... Ну и не только настройки, кое какие объекты ещё...
Решение задачи: «.NET 4.x Сохранение списка объектов класса в ручную, сохранение в XML. Без сериализации.»
textual
Листинг программы
//Создаем объект репозитория ProjectLogXmlRepository rep = new ProjectLogXmlRepository("MyProjects.xml"); //Читаем данные var projects = rep.GetProjects();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д