我有一个这样的类,我想在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>));
}
显然这不起作用。这样做的正确方法是什么?
答案 0 :(得分:3)
您应该能够将Serializable标记放在MyListClass上,这将导致ExtraData被序列化为自己的字段。
答案 1 :(得分:0)
请参阅PageStatePersister Class上的文档,这是ASP.NET最近处理ViewState的方式。特别是,请参阅ObjectStateFormatter Class,这是IStateFormatter界面的默认实现。
从该文档中可以看出,任何可以使用BinaryFormatter序列化的类都可以正常工作。