Как сериализовать класс, содержащий объекты других классов (рекурсивная сериализация?)
Как я могу это сделать? Или сериализатор автоматически пойдет с рекурсией и сериализует все эти дочерние объекты в XML?
Приведите пример, как бы вы сериализовали классы, которые содержат в себе объекты других классов! Это было ядром этого вопроса!
Я пробовал это, и это не выводилочто-нибудь (кроме заголовка XML) в целевой файл XML.
Моя проблема в том, что мне нужно сериализовать простой класс, который просто содержит объект List. Но эти сущности также содержат объекты List. (Другим плюсом было бы, если бы я мог избежать сериализации некоторых компонентов, потому что некоторые являются производными и имеют словари в них).
public void SaveCurrent(string MapFileName)
{
string MapPath = world_.game_.Content.RootDirectory + "/Maps/" + MapFileName + ".xml";
StreamWriter MapWriter = new StreamWriter(MapPath);
Map SavedMap = new Map();
SavedMap.Entities = world_.Entities;
XmlSerializer xSerializer = new XmlSerializer(SavedMap.GetType());
xSerializer.Serialize(MapWriter, SavedMap);
MapWriter.Close();
}
Это кусок кода, который выполняет сериализацию.
public class Map
{
internal string MapName;
internal string MapDescription;
internal string MapAuthor;
public List<Entity> Entities = new List<Entity>();
}
И это класс, который сериализован.Могут ли внутренние компоненты считаться открытыми, если сериализация вызывается из одной и той же сборки? Код вызывает исключение наSavedMap.GetType()
функция, и я попробовалtypeof(Map)
тоже, но безуспешно. Я думаю, это потому, что мне нужен какой-то другой способ обработки каждого нового класса (глубокая сериализация), как мне это сделать?
Кроме того, я обнаружил на некоторых примерах, что нет наследования интерфейса или атрибутов, поэтому я тоже не добавил их, но я планирую использовать IXmlSerializable, хотя я не знаю, как вызвать другую сериализацию внутри WriteXML реализация.