序列化视图状态时出错

5

我在序列化视图状态数据时遇到了问题。我正在使用VS2010,当尝试向视图状态添加属性时,会收到以下错误消息:

Error serializing value 'System.Collections.Generic.List`1[Access.ARW.Business.Filters.Parameters.Parameter]' of type 'System.Collections.Generic.List`1[[Access.ARW.Business.Filters.Parameters.Parameter, Access.ARW.Business, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].'

我已经在我尝试序列化的类上方添加了[Serializable]属性,但我仍然出现了这个错误...有任何想法吗?

这里是Class A中的属性声明:

private List<Filters.Parameters.Parameter> ReportParameters
{
   get
   {
       if (ViewState["ReportParameters"] == null)
       {
           ViewState["ReportParameters"] =
               new List<Filters.Parameters.Parameter>();
       }
       return (List<Filters.Parameters.Parameter>) ViewState["ReportParameters"];
   }

   set
   {
       ViewState["ReportParameters"] = value;
   }
}

2
你的类是否包含更多的对象?如果是,那么你的对象层次结构中的所有内容都必须标记为 [Serializable]。 - Peter Monks
请发布代码示例。这将有助于您和其他人了解您的代码正在执行什么操作。 - MethodMan
@pjmonks - 是的,有几个子类别的类 - 这些类别都已经添加了 [serializable] 属性.... - user559142
1
请不要在标题中添加类似“- C# VS2010”的内容。这就是标签的作用。另外,这个问题与VS2010无关。 - John Saunders
你尝试过存储一个简单的数组而不是列表吗?虽然这不应该是个问题,但我听过很多次这样的建议。 - Ishikawa
1个回答

6

你是否忘记给类的某个组件添加Serializable属性?尝试将类的各个部分逐一添加到ViewState,直到找到有问题的组件。


6
"Divide and conquer"是一种基本的调试技术。我不理解将一些“庞大”的东西暂时分成更小的块可能会有什么问题。如果它确实如此“庞大”,那么它很可能根本就不应该放在ViewState中。 - Steve Wellens
创建单元测试来确保您的对象可序列化,这个想法怎么样? - Phil Bolduc
1
如果代码库非常庞大且不熟悉,而且之前维护该代码的人留下了一些问题,那么拆分它可能会成为一个问题。 - Darth Continent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接