如何在viewstate中存储从字典继承的类的实例?

时间:2012-08-29 09:13:53

标签: c# asp.net dictionary viewstate webpage

在网页中,我在Dictionary

中存储ViewState
Dictionary<string, string> items = new Dictionary<string, string>();
ViewState["items"] = items;

效果很好。但是,出于某些原因,我想使用自己的类而不是直接使用Dictionary

class MyDictionary : Dictionary<string, string> 
{
   ... 
}
MyDictionary items = new MyDictionary();
ViewState["items"] = items;

它没有按预期工作。 ASP.NET抱怨事实

  

MyDictionary未标记为可序列化

没关系,因为类属性没有被激活。所以我改变了我的代码:

[Serializable]
class MyDictionary : Dictionary<string, string> { ... }

但如果我这样做,我会收到另一条错误消息,这次是在页面回发之后:

  

此页面的状态信息无效,可能已损坏。
   System.Web.UI.ObjectStateFormatter.Deserialize(Stream inputStream)

如果viewstate可以序列化Dictionary,为什么它对从它继承的类不起作用?如何使这项工作?

1 个答案:

答案 0 :(得分:4)

您需要为您的类设置反序列化构造函数。

class MyDictionary : Dictionary<string, string> 
{
   public MyDictionary (){ }
   protected MyDictionary (SerializationInfo info, 
                           StreamingContext ctx) : base(info, ctx) { }
}

如果查看字典类,则需要将其反序列化。

protected Dictionary(SerializationInfo info, StreamingContext context);

尝试使用测试页面并且工作正常。