¿Cómo puedo hacer esto? ¿O el serializador irá automáticamente con la recursión y serializará todos esos objetos secundarios en XML?¿Cómo serializar una clase que contiene objetos de otras clases (serialización recursiva?)
Dame un ejemplo de cómo serializarías las clases que contienen los objetos de otras clases en sí mismas. Ese fue el núcleo de esta pregunta!
He intentado esto, y no produjo nada (excepto el encabezado XML) en el archivo XML de destino.
Mi problema es que necesito serializar una clase simple, que solo contiene un objeto List. Pero esas Entidades también tienen objetos List. (Otra ventaja sería si pudiera evitar la serialización de algunos componentes, porque algunos se derivan y tienen diccionarios en ellos).
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();
}
Esa es la pieza de código que hace la serialización.
public class Map
{
internal string MapName;
internal string MapDescription;
internal string MapAuthor;
public List<Entity> Entities = new List<Entity>();
}
Y esta es la clase que se serializa.
¿Se podrían contar los elementos internos como públicos, si se llama a la serialización desde el mismo conjunto?
El código arroja una excepción en la función SavedMap.GetType()
, y también he intentado typeof(Map)
, pero sin éxito. Supongo que es porque necesito otra forma de manejar cada nueva clase (serialización profunda) ¿cómo hago eso?
Además, he encontrado en algunos ejemplos, que no hay herencia de interfaz o atributos, por lo tanto, tampoco los agregué, pero estoy pensando en usar IXmlSerializable, aunque no sé cómo llamar otra serialización dentro de la implementación de WriteXML.
¿Se puede compartir una muestra de lo que has probado? –
Lo siento, no lo hice antes. – Johnny
"¿Se podrían contar los elementos internos como públicos, si se llama a la serialización desde el mismo ensamblaje?" No. El XmlSerializer solo considera miembros públicos. (De hecho, XmlSerializer crea un ensamblaje dinámico para contener el código que serializa y deserializa, por lo que la serialización real * siempre * tiene lugar en un ensamblaje diferente de su código). – itowlson