c# - 无法序列化 session 状态... [已更新!]

标签 c# asp.net serialization

我试图在 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/

相关文章:

asp.net - 将 ASP.NET 应用程序转换为 Mono,无需 .csproj 和 .sln

html - 如何在 ASP.NET MVC 中获取移动设备的 CSS 宽度?

c# - 将 C# 类直接序列化到 SQL Server?

c++ - 尝试将 boost.serialization 包含到我的 VS 项目时遇到问题

.net - WCF 自定义序列化程序

c# - 如何在 Automapper 中映射嵌套的子对象属性

c# - SQL 语法问题

c# - 统一注册相互覆盖

c# - 向外部方发出出站调用时,Azure Functions 中没有静态 IP 地址

c# - ASP.Net 网站管理工具“安全”选项卡错误。无法访问寄存器 0x​​104567911