2011-05-18 75 views
2

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

我试图序列化XNA游戏工作室的部分。

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

有什么建议吗?

+0

出于兴趣,为什么要序列化一个'RasterizerState'为XML? – 2011-05-19 11:11:50

+0

不适用于xml。开发游戏的体系结构应该包含多个图形设备选项,其中光栅化器状态选项是其中的一部分。例如,当我与3个团队打交道时 - 每个团队都有一套与他们正在执行的艺术有关的图形设备选项。团队1中的人员决定图形在团队2或团队1本身中看起来不同。在最后一天,我需要在最终的设置中进行比较。因此需要跟踪随之发生的事情。所有的序列化都以二进制形式完成。 – Chris 2011-05-19 14:11:37

+0

我可能会建议一个不同的序列化程序。 XNA的'IntermediateSerializer'可能是合适的(不足之处:你只能在Windows上进行序列化)。它可以处理任意对象,并且可以通过Content Pipeline加载它的序列化输出。 – 2011-05-20 03:13:01

回答

1

其常见问题。我会问自己的第一个问题是为什么你试图序列化一个没有标记为可序列化的类型的对象。这种类型的作者是否因为某种原因而离开它?是否有机会在未来将该类型扩展为一些不可序列化的行为?

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

  1. 创建一个包含所有你想要序列,并从实际对象的值复制到包装对象和背部的属性包装对象(标记为可序列)。

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

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