Asp.net 可序列化的Web部件

Asp.net 可序列化的Web部件,asp.net,sharepoint-2013,Asp.net,Sharepoint 2013,我有以下问题: 我正在处理一个包含ReportViewer控件的项目。我需要使用以下句子在会话中保护此控件: [Serializable] [ToolboxItemAttribute(false)] public partial class VisualReportViewer : WebPart { ...... protected void Page_Load(object sender, EventArgs e) { .....

我有以下问题:

我正在处理一个包含ReportViewer控件的项目。我需要使用以下句子在会话中保护此控件:

[Serializable]
[ToolboxItemAttribute(false)]
public partial class VisualReportViewer : WebPart
{
     ......

     protected void Page_Load(object sender, EventArgs e)
     {
         .....
         ViewState["ReportViewer1"] = ReportViewer1;
         .....
     }

     .....
}
此句子显示以下错误消息:

Type 'Microsoft.Reporting.WebForms.ReportViewer' in Assembly Microsoft.ReportingServices.SharePoint.UI.WebParts, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' is not marked as serializable. 

如您所见,我在类的顶部添加了Serializable,但没有解决方案。有什么办法吗?是否可以保存Web部件控件以在当前会话中使用?

为什么使用
ViewState
而不是
Session
?现在我使用Session,但问题仍然存在……是否使用默认会话而不将其配置为使用sql?如果是这样-对象不需要序列化,因为默认会话存储在内存中。