So serialisieren Sie eine Klasse, die Objekte anderer Klassen enthält (rekursive Serialisierung?)

Wie kann ich das machen? Oder wird der Serializer automatisch mit der Rekursion beginnen und alle diese untergeordneten Objekte in XML serialisieren?

Geben Sie mir ein Beispiel, wie Sie Klassen serialisieren würden, die Objekte anderer Klassen in sich enthalten! Das war der Kern dieser Frage!

Ich habe es versucht und es wurde nicht ausgegebenetwas (mit Ausnahme des XML-Headers) in die XML-Zieldatei.

Mein Problem ist, dass ich eine einfache Klasse serialisieren muss, die nur ein List-Objekt enthält. Diese Entitäten enthalten jedoch auch Listenobjekte. (Ein weiteres Plus wäre, wenn ich die Serialisierung einiger Komponenten vermeiden könnte, da einige davon abgeleitet sind und Wörterbücher enthalten).

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

Das ist der Code für die Serialisierung.

public class Map
{
    internal string MapName;
    internal string MapDescription;
    internal string MapAuthor;
    public List<Entity> Entities = new List<Entity>();
}

Und das ist die Klasse, die serialisiert ist.Können Interna als Publics gezählt werden, wenn die Serialisierung von derselben Assembly aufgerufen wird? Der Code löst eine Ausnahme beimSavedMap.GetType() funktion, und ich habe es versuchttypeof(Map) auch, aber ohne erfolg. Ich denke, es liegt daran, dass ich eine andere Möglichkeit brauche, um mit jeder neuen Klasse umzugehen (Deep Serialization). Wie mache ich das?

Außerdem habe ich bei einigen Beispielen festgestellt, dass es keine Schnittstellenvererbung oder -attribute gibt, daher habe ich diese auch nicht hinzugefügt, aber ich plane, IXmlSerializable zu verwenden, obwohl ich nicht weiß, wie ich eine andere Serialisierung in WriteXML aufrufen soll Implementierung.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage