не сериализируется в XML. Это подтверждает, что сериализация XML учитывает только открытые свойства и поля.
Сериализация коллекций объектов
Теперь, когда вы видели, каким образом сохранять одиночный объект в потоке, давайте посмотрим,как сохранить набор объектов. Создайте локальную функцию, которая инициализирует список объектов
JamesBondCar
и сериализирует его в XML:
static void SaveListOfCarsAsXml
{
// Сохранить список List<T> объектов JamesBondCar.
List<JamesBondCar> myCars = new
{
new JamesBondCar{CanFly = true, CanSubmerge = true},
new JamesBondCar{CanFly = true, CanSubmerge = false},
new JamesBondCar{CanFly = false, CanSubmerge = true},
new JamesBondCar{CanFly = false, CanSubmerge = false},
};
using (Stream fStream = new FileStream("CarCollection.xml",
XmlSerializer xmlFormat = new XmlSerializer(typeof(List<JamesBondCar>));
xmlFormat.Serialize(fStream, myCars);
}
Console.WriteLine("=> Saved list of cars!");
}
Наконец, добавьте следующую строку, чтобы задействовать новую функцию:
SaveListOfCarsAsXml;
Десериализация объектов и коллекций объектов
Десериализация XML буквально противоположна сериализации объектов (и коллекций объектов). Рассмотрим показанную далее локальную функцию для десериализации XML-разметки обратно в граф объектов. И снова обратите внимание, что тип, с которым нужно работать, должен быть передан конструктору
XmlSerializer
:
static T ReadAsXmlFormat<T>(string fileName)
{
// Создать типизированный экземпляр класса XmlSerializer.
XmlSerializer xmlFormat = new XmlSerializer(typeof(T));
using (Stream fStream = new FileStream(fileName, FileMode.Open))
{
T obj = default;
obj = (T)xmlFormat.Deserialize(fStream);
return obj;
}
}
Добавьте к операторам верхнего уровня следующий код, чтобы восстановить XML-разметку обратно в объекты (или списки объектов):