0

我有一个属性是List<BaseValidator>. 我需要将此属性保存在视图状态中,以便它存在于回发中。我收到一条错误消息,表明该列表不可序列化。

我已经用谷歌搜索了......并且用谷歌搜索了但还没有得到有效的答案。

我还创建了自己的自定义类,但我仍然收到错误,因为 BaseValidator 不是简单类型。

有人有什么想法吗?

4

3 回答 3

0

如果泛型类型是可序列化的,则列表是可序列化的。您应该使列表中的通用对象和子对象可序列化。将[Serializable]标签添加到这些对象。

于 2013-07-31T09:04:22.720 回答
0

您可以序列化数组。因此,编辑您的类以包含列表的数组属性。将编辑器可浏览设置为从不,以便它不会出现在 Visual Studio 中并使您的列表非序列化。

using System;
using System.ComponentModel;

[Serializable]
public class MyClass
{
    //property for usage in code. dont serialize
    [NonSerialized]
    public List<BaseValidator> MyList { get; set; }

    // Property for serialization only
    [EditorBrowsable(EditorBrowsableState.Never)]
    public BaseValidator[] MyArray
    {
        get
        {
            return MyList.ToArray();
        }
        set
        {
            MyList = new List<BaseValidator>(value);
        }
    }
}
于 2013-07-31T09:04:47.540 回答
0

如果列表不可序列化,您始终可以将类标记为[Serializable]并允许将其存储在ViewState

于 2013-07-31T09:05:04.943 回答