如何序列化系统类型以便存储在viewstate中?

时间:2013-07-31 08:57:43

标签: c# asp.net serialization

我有一个List<BaseValidator>的属性。我需要在viewstate中保存此属性,以便它在回发时存在。我收到一个错误,表明该列表不可序列化。

我用Google搜索了...并且用谷歌搜索但没有得到一个有效的答案。

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

有人有任何想法吗?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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);
        }
    }
}

答案 2 :(得分:0)

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