2

我已经为 Compact Framework 实现了一个流行层(包括一个类似BinaryFormatter的序列化程序)。我希望能够序列化编译器生成的类,这些类在适当的情况下由 lambda 和迭代器等产生,以便(例如)一个 lambda 及其封闭变量(即显示类实例)被添加到可序列化对象上的事件中,并且所有封闭变量都是可序列化的,那么生成的对象图仍然是完全可序列化的。

如果这些类的实例只能通过与它们序列化的二进制文件完全相同的构建来反序列化,这是可以接受的——流行层主要是为了在应用程序意外终止时提供持久性(电源故障和设备重启是不同的可能性) , 并且序列化的数据流不应该是向前或向后兼容的,或者甚至在同一源代码的两个编译中兼容——无论如何,当我们下一次与之交谈时,所有重要的东西都将被发送到服务器,并且我们不会在断开连接时更新。

在这种有限的上下文中,我的格式化程序将这些编译器生成的类视为可序列化的类是否合理?我看到的唯一替代方法是在需要关注可序列化性的任何地方手动实现编译器支持的模式,其后果从过于冗长到几乎不可读。

4

1 回答 1

2

我明白你在做什么,但根据我的经验,专注于序列化数据并通过回滚/转发到已知状态来处理持久性是一个更好的主意,可能使用本地 CQRS 队列或其他一些东西存储“你是如何到达那里的”的方式。

关于具体问题,在问题的狭窄范围内(仅在相同的构建等上工作)我应该没问题,但这在很大程度上取决于这些变量中捕获的任何内容是否没有合理的序列化- 即类似this无法重建的 UI 元素(很容易被不可见的 捕获)(操作系统句柄等)。如果它是孤立的数据(我的意思是:图表只是来自您自己的代码中的数据 - 没有非托管依赖项),那么我想应该没问题。

另一个问题是 CF 在完整框架中缺乏很多可用的更强反射,这可能会使这比在常规框架上更尴尬(GetUninitializedObject例如)。可能是可行的,但需要更多的工作。

于 2011-01-19T08:21:02.897 回答