.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();