我正在使用EWS开发我的电子邮件客户端。我发现,如果我将ItemId存储在viewstate中,它将导致异常说:
在程序集'Microsoft.Exchange.WebServices,Version = 14.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'中键入'Microsoft.Exchange.WebServices.Data.ItemId'未标记为可序列化。
如果我将ItemId
存储为字符串:
ViewState["itemId"] = id.ToString();
然后尝试退回,
ItemId id = (ItemId)ViewState["itemId"];
它说我无法从字符串转换为ItemId
。有什么想法吗?
答案 0 :(得分:6)
您正在存储字符串并期待ItemId。你应该存储为
ItemId itemId = new ItemId();
ViewState["itemId"] = itemId;
但是,由于ItemId不可串行化,因此无法存储。要存储它,请使您的可序列化类继承自ItemId并覆盖所有成员并将其存储在ViewState
中[Serializable]
public class MyItemId: ItemId {
// override all properties
}
像这样存储
MyItemId itemId = new MyItemId();
ViewState["itemId"] = itemId;
并检索
MyItemId id=(MyItemId)ViewState["itemId"];
答案 1 :(得分:6)
你有没有尝试过:
ItemId id = new ItemId( ViewState["itemId"] );
答案 2 :(得分:3)
如错误消息所示,除非将对象标记为可序列化,否则无法在viewstate中存储对象。
查看文档here,似乎ItemId类有一个UniqueId属性,它是一个字符串,以及一个带有字符串'uniqueId'参数的构造函数。
那么,你可以将uniqueId存储在viewstate中,并使用构造函数重新生成对象吗?
答案 3 :(得分:0)