如何序列化系统类型以便在视图状态下存储

本文关键字:视图状态 存储 序列化 系统 类型 | 更新日期: 2023-09-27 18:25:41

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

我在谷歌上搜索过。。。在谷歌上搜索,但还没有得到有效的答案。

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

有人有什么想法吗?

如何序列化系统类型以便在视图状态下存储

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

您可以序列化数组。因此,编辑您的类以包含列表的数组属性。将编辑器可浏览设置为never,这样它就不会显示在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);
        }
    }
}

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