反序列化包含其他对象列表的对象的方法

本文关键字:对象 方法 包含 列表 反序列化 其他 | 更新日期: 2023-09-27 18:32:22

我有一个对象GameOptions,其中包含一个图块列表和一个选项列表。将单个 GameOptions 对象放入一个列表中,然后对其进行序列化以提供类似于以下内容的格式:

<GameOptions>
    <Tiles>
        <Tile1>
        </Tile1>
    </Tiles>
    <Options>
        <Option1>
        </Option1>
    <Options>
</GameOptions>

我想知道如何将保存的文件分解回游戏选项对象,我可以访问图块和选项值?以前,当我需要读取XML文件时,我只是加载文档,遍历每个节点并复制值,但是我认为此方法不会再次起作用,因为某些节点属于Tile类,而其他节点属于选项类。提前谢谢你!

这是我首先用来序列化的代码:

XmlSerializer serializer = new XmlSerializer(gameSave.GetType());
StreamWriter writer = new StreamWriter(@"savedmap.xml");
serializer.Serialize(writer.BaseStream, gameSave);

反序列化包含其他对象列表的对象的方法

这可能需要一些调整,但这里有一个粗略的反序列化实现:

    private GameOptions Deserialize()
    {
        var serializer = new XmlSerializer(typeof(GameOptions));
        using (var reader = new StreamReader(@"savedmap.xml"))
        {
            return (GameOptions)serializer.Deserialize(reader);
        }
    }