【问题标题】:Serializing XNA 4.0序列化 XNA 4.0
【发布时间】:2011-05-18 23:43:15
【问题描述】:

类型 'Microsoft.Xna.Framework.Graphics.RasterizerState' 在大会 'Microsoft.Xna.Framework.Graphics, 版本=4.0.0.0,文化=中性, PublicKeyToken=842cf8be1de50553' 是 未标记为可序列化。

我正在尝试序列化 xna 游戏工作室的部分。

不幸的是我不能直接序列化这个类。

有什么建议吗?

【问题讨论】:

  • 出于兴趣,为什么要将RasterizerState 序列化为XML?
  • 不是 xml。我正在开发游戏的架构应该包含多个图形设备选项,其中光栅化状态选项是其中的一部分。例如,当我与 3 个团队打交道时,每个团队都有一组与他们正在表演的艺术相关的图形设备选项。团队 1 中的某个人决定图形在团队 2 中或在团队 1 本身中看起来不同。在一天结束时,我需要对最终会起作用的设置进行比较。因此需要跟踪什么是什么。所有的序列化都以二进制形式完成。
  • 我可以建议一个不同的序列化程序。 XNA 的IntermediateSerializer 可能是合适的(缺点:您只能在 Windows 上进行序列化)。它可以处理任意对象,您可以通过内容管道加载其序列化输出。

标签: c# serialization xna-4.0


【解决方案1】:

这是一个常见的问题。我要问自己的第一个问题是,为什么您要序列化未标记为可序列化类型的对象。该类型的作者是否出于某种原因将其关闭?将来有没有可能通过一些不可序列化的行为来扩展该类型?

然后我脑子里有 3 个解决方案。不幸的是,您不能直接序列化对象。你可以这样做:

  1. 创建一个包装对象(标记为可序列化),其中包含您要序列化的所有属性,并将值从实际对象复制到包装对象并返回。

  2. 扩展选项 1:插入一个简单的包装器对象,创建一个更动态的包装器类,其中包含一个 KeyValuePairs 列表,您可以在其中将 propertyNames 绑定到 propertyValues 并制作一些通用代码,这些代码可以基于现有的填充此列表对象并根据这样的列表填充对象。

  3. 使用不安全的代码并自己进行序列化(固定对象,读取其内存并写入内存流)。

【讨论】:

    猜你喜欢
    • 2011-10-07
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多