【问题标题】:Serializing IEnumerator<T> created using yield return序列化使用 yield return 创建的 IEnumerator<T>
【发布时间】:2011-03-10 20:59:26
【问题描述】:

有没有办法序列化(使用BinaryFormatter)当我使用yield returns 时创建的IEnumerator&lt;T&gt;?自动生成的类未标记为 Serializable

【问题讨论】:

    标签: c# .net serialization yield


    【解决方案1】:

    您使用哪个类来实现IEnumerable&lt;T&gt;List&lt;T&gt; 应该可以序列化了。

    在序列化之前尝试在您的集合上调用ToList()

    【讨论】:

      【解决方案2】:

      编译器生成的 enumerable 没有应用 [Serializable] 属性,所以,不,开箱即用你不能这样做。

      你应该问自己,“我为什么在这里使用 yield,这个对象反序列化后意味着什么?”

      如果方便的话,你可以用它来填充一个可以序列化的类型。如果您使用它以懒惰的方式执行一些繁重的工作,您可能需要考虑更改您的设计以序列化/反序列化执行该繁重工作所需的信息。

      【讨论】:

      • 这其实不太对。我曾经认为你也不能,但实际上你可以使用代理进行序列化以达到有趣的效果,同时仍然保留相当通用的代码。查看示例代码:dotnet.agilekiwi.com/blog/2007/05/…
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-06-21
        • 2023-03-21
        • 2019-06-19
        • 2010-11-07
        • 2021-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多