.NET 4.x Сохранение списка объектов класса в ручную, сохранение в XML. Без сериализации. - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Хотел спросить. Как можно сохранить список объектов в 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;
        }
    }
}
Вот я создаю объекты, добавляю их в список и сохраняю сериализацией в XML:
        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();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5