Pau*_*aul 8 c# asp.net serialization
我试图在会话中存储一些对象(使用StateServer),但是我收到错误"System.Web.HttpException:无法序列化会话状态.在'StateServer'和'SQLServer'模式下"
我知道错误信息的含义,但我无法理解为什么.我使用的所有类都标记为Serializable,我可以使用以下命令对对象进行序列化和反序列化:
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)));
Run Code Online (Sandbox Code Playgroud)
这有效,并将使用以下序列化:
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();
Run Code Online (Sandbox Code Playgroud)
但是在尝试将其存储在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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将此"Item"属性设置为"new RecordReference()",则会发生错误.如果它为null,那很好.
所以现在,问题是,为什么StateServer不能应对这个?序列化为XML时序列化很好......
编辑...
在Assembly'System.Xml,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'中键入'System.Xml.XmlElement'未标记为可序列化.
.....我们是说C#中的Xml对象不可序列化吗?!还有其他人认为这是疯了吗?
在堆栈跟踪中,您应该看到一个SerializationException,它将提到它无法序列化的类...
[SerializationException: Type 'SomethingOrOther' in Assembly 'SomethingElse' ...
Run Code Online (Sandbox Code Playgroud)
请注意,状态服务器使用二进制序列化而不是XML序列化.
所以我找到了问题的答案,但我对此并不满意.
基本上,我正在使用的一些类包含XMLElements和XMLNodes(它们是使用svcutil自动生成的).无论出于何种原因,它认为它需要它们.
这些XML类都不是可序列化的!我是唯一一个发现这完全失败的人吗?因此,要将这组类添加到会话中,我必须将它们序列化为字符串,然后将其存储在会话中,然后将其序列化.所以我将它序列化以便将其序列化.....!
不确定我对此很满意,但那是我遇到问题的原因.
| 归档时间: |
|
| 查看次数: |
15587 次 |
| 最近记录: |