我试图在 session 中存储一些对象(使用 StateServer),但出现错误“System.Web.HttpException:无法序列化 session 状态。在‘StateServer’和‘SQLServer’模式下"
我知道错误消息的含义,但我不明白为什么。我正在使用的所有类都标记为可序列化,并且我能够使用以下方法将对象序列化和反序列化为 XML:
System.IO.StringReader stringReader = new System.IO.StringReader(xml);
System.Xml.XmlTextReader xmlTextReader = new System.Xml.XmlTextReader(stringReader);
System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(Parts));
Parts obj = ((Parts)(xmlSerializer.Deserialize(xmlTextReader)));
这行得通,并且也将序列化使用:
System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(this.GetType());
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
xmlSerializer.Serialize(memoryStream, this);
memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
System.IO.StreamReader streamReader = new System.IO.StreamReader(memoryStream);
return streamReader.ReadToEnd();
但是当试图将它存储在 session 中时抛出错误。
有没有人知道可能导致这种行为的原因?
编辑:
我刚刚发现这一行导致了错误(已删除所有内容并重新包含它)
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("RecordReference", typeof(RecordReference), Form = System.Xml.Schema.XmlSchemaForm.Unqualified, Order = 0)]
[System.Xml.Serialization.XmlElementAttribute("PartContainer", typeof(PartContainer), Form = System.Xml.Schema.XmlSchemaForm.Unqualified, Order = 0)]
public object Item
{
get
{
return this.itemField;
}
set
{
this.itemField = value;
}
}
如果我将此“Item”属性设置为“new RecordReference()”,则会发生错误。如果它为 null,则没有问题。
那么现在的问题是,为什么 StateServer 不能处理这个问题?它在序列化为 XML 时序列化良好...
编辑...
程序集“System.Xml,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”中的类型“System.Xml.XmlElement”未标记为可序列化。
.....我们是说 C# 中的 Xml 对象不可序列化吗?!还有其他人认为这近乎疯狂吗?
最佳答案
在堆栈跟踪中,您应该看到一个 SerializationException,它会提到它无法序列化哪个类...
[SerializationException: Type 'SomethingOrOther' in Assembly 'SomethingElse' ...
请注意,状态服务器使用二进制序列化而不是 XML 序列化。
关于c# - 无法序列化 session 状态... [已更新!],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1335444/