【发布时间】:2010-11-23 01:19:32
【问题描述】:
我试图在会话中存储一些对象(使用 StateServer),但我收到错误“System.Web.HttpException: Unable to serialize session state. In 'StateServer' and 'SQLServer' mode "
我知道错误消息的含义,但我不知道为什么。我使用的所有类都标记为可序列化,我可以使用以下方法对 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 对象不可序列化?!有没有人认为这近乎疯狂?
【问题讨论】:
标签: c# asp.net serialization