4

我有一个像这样的类,我想在 ViewState 中保存一个 asp.net UserControl。它基本上用一些方法扩展了一个通用列表,但也添加了一些属性,例如

public class MyListClass: List<MyObject>
{
    public string ExtraData;
 // some public methods
}

MyObject 是可序列化的,方法实现如下:

[Serializable()]
class MyObject 
{
    public MyObject(SerializationInfo info, StreamingContext ctxt)
    {
        Prop1 = (string)info.GetValue("Prop1", typeof(string));
        //...
    }
    public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
    {
        info.AddValue("Prop1",Prop1);
    }
}

通用列表本质上是可序列化的。ViewState 可以正常工作,List<MyObject>但我似乎无法弄清楚如何为 MyListClass 实现序列化。

直觉上我想做的是这样的:

public MyListClass(SerializationInfo info, StreamingContext ctxt)
{
    ExtraData= (string)info.GetValue("ExtraData", typeof(string));
    this = (List<MyClass>)info.GetValues("BaseList",typeof(List<MyClass>));
}

显然那是行不通的。这样做的正确方法是什么?

4

2 回答 2

3

您应该能够将 Serializable 标记放在 MyListClass 上,这将导致 ExtraData 被序列化为自己的字段。

于 2010-12-21T22:17:56.527 回答
0

请参阅PageStatePersister Class的文档,这是 ASP.NET 如今处理 ViewState 的方式。具体来说,请参见ObjectStateFormatter 类,它是IStateFormatter接口的默认实现。

从该文档看来,任何可以使用BinaryFormatter序列化的类都应该可以工作。

于 2010-12-22T01:15:49.927 回答