使用yield return创建的IEnumerator<T>序列化

6
有没有一种方法可以序列化(使用BinaryFormatter)在使用yield return时创建的IEnumerator<T>?自动生成的类没有标记为Serializable
3个回答

4

你正在使用哪个类来实现 IEnumerable<T>?使用 List<T> 应该可以正确序列化。

在序列化之前,尝试调用集合上的 ToList() 方法。


3
编译器生成的可枚举对象没有应用 [Serializable] 属性,因此默认情况下不能执行此操作。如果您使用了 yield 关键字,请问自己:“在反序列化该对象后,这意味着什么?” 如果只是为了方便,可以使用它来填充可以序列化的类型。如果您使用它以惰性的方式执行一些重型工作,则可能需要考虑更改设计以序列化/反序列化执行此重型工作所需的信息。请注意不要删除 HTML 标签。

2
这并不完全正确。我曾经认为你也不能这样做,但实际上你可以使用代理以有趣的方式进行序列化,同时保留相当通用的代码。请查看示例代码:http://dotnet.agilekiwi.com/blog/2007/05/implementing-workflow-with-persistent.html - J Trana

0
只需迭代枚举器并序列化返回的每个实例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接