【问题标题】:Method of deserializing an object which contains lists of other objects反序列化包含其他对象列表的对象的方法
【发布时间】:2014-11-28 21:41:15
【问题描述】:

我有一个 GameOptions 对象,它包含一个 Tiles 列表和一个选项列表。单个 GameOptions 对象被放入一个列表中,然后我将其序列化以给我一个类似于这样的格式:

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

我想知道如何将保存的文件反序列化,回到 GameOptions 对象,我可以访问 Tiles 和 Options 值?之前,当我需要读取 XML 文件时,我刚刚加载了文档,遍历了每个节点并复制了值,但是我认为这种方法不会再次起作用,因为有些节点属于 Tile 类,而其他人属于 Options 类。先感谢您!

这是我最初用来序列化的代码:

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

【问题讨论】:

  • I am wondering how can I deseialize the saved file 使用 XmlSerializer。但更好的是,在想知道之前,先阅读一些关于 xml 的文档。
  • 任何你以有效的 xml 或 json 格式序列化的东西都可以用同样的机制进行反序列化。你用什么来序列化这个?你尝试反序列化什么?
  • 与代码一样,架构通常应包含Tile1Tile2、..TileN 属性/键。在 XML 和 JSON 结构下都有标准的集合处理.. 在任何情况下,唯一的要求是反序列化器知道如何“撤消”序列化,这应该由一组规则定义.. 你(或更好,一个标准的序列化库)定义。
  • 无论如何,msdn.microsoft.com/en-us/library/vstudio/ms233843.aspx 可能是一个不错的起点。

标签: c# wpf list serialization deserialization


【解决方案1】:

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

    private GameOptions Deserialize()
    {

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

【讨论】:

    猜你喜欢
    • 2018-03-20
    • 1970-01-01
    • 2016-10-01
    • 2015-10-02
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多