.NET中的序列化异常:System.InvalidOperationException:必须在System.Collections.Generic.Stack`1上实现默认访问器

.NET中的序列化异常:System.InvalidOperationException:必须在System.Collections.Generic.Stack`1上实现默认访问器,.net,generics,serialization,.net,Generics,Serialization,我想做的就是 XmlSerializer serializer = new XmlSerializer(typeof(Stack<int>)); 在运行时,我得到以下结果: System.InvalidOperationException:必须在上实现默认访问器 System.Collections.Generic.Stack`1[[System.Int32,mscorlib,Version=2.0.0, 区域性=中性,PublicKeyToken=b77a5c561934e089

我想做的就是

XmlSerializer serializer = new XmlSerializer(typeof(Stack<int>));
在运行时,我得到以下结果:

System.InvalidOperationException:必须在上实现默认访问器 System.Collections.Generic.Stack`1[[System.Int32,mscorlib,Version=2.0.0, 区域性=中性,PublicKeyToken=b77a5c561934e089]],因为它继承自ICollection


我不应该序列化堆栈吗

例如,由于堆栈类没有默认的索引访问器,因此无法使用该方法对其进行序列化

我建议将堆栈复制到列表中,然后序列化列表

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

看看这是否效果更好。

由于堆栈类没有默认的索引访问器,例如,您无法使用该方法序列化它

我建议将堆栈复制到列表中,然后序列化列表

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

看看这是否效果更好。

确实有效,谢谢!了解为什么框架设计人员决定不支持堆栈本身的序列化是很有意思的……他们没有为堆栈提供默认的访问器。例如,你不能说x=myStack[3]。堆栈的操作与普通集合不同,因此访问器没有在其上实现。它确实可以工作,谢谢!了解为什么框架设计人员决定不支持堆栈本身的序列化是很有意思的……他们没有为堆栈提供默认的访问器。例如,你不能说x=myStack[3]。堆栈的操作方式与普通集合不同,因此不会在其上实现访问器。