【问题标题】:Serialization exception in .NET: System.InvalidOperationException: You must implement a default accessor on System.Collections.Generic.Stack`1.NET 中的序列化异常:System.InvalidOperationException:您必须在 System.Collections.Generic.Stack`1 上实现默认访问器
【发布时间】:2008-12-29 20:56:14
【问题描述】:

我想做的只是

XmlSerializer serializer = new XmlSerializer(typeof(Stack<int>));

我在运行时得到以下信息:

System.InvalidOperationException: 你必须在 System.Collections.Generic.Stack`1 [[System.Int32,mscorlib,版本=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] 因为它继承自 ICollection。

我不应该序列化Stack&lt;int&gt; 吗?

【问题讨论】:

    标签: .net generics serialization


    【解决方案1】:

    由于 Stack 类没有默认访问器(例如通过索引),因此您无法使用该方法对其进行序列化。

    我建议将您的堆栈复制到一个列表,然后序列化该列表。

    List<int> serializableLIst = new List<int>( myStack );
    XmlSerializer serializer = new XmlSeralizer(typeof(List<int>));
    

    看看是不是效果更好。

    【讨论】:

    • 它确实有效,谢谢!知道为什么框架设计者决定不支持 Stack 本身的序列化会很有趣......
    • 它们不提供堆栈的默认访问器。例如,您不能说 x = myStack[3]。 Stack 的操作方式与普通集合不同,因此未在其上实现访问器。
    猜你喜欢
    • 1970-01-01
    • 2010-12-05
    • 2023-02-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多