求教大侠:
我想在用户页面存储 User 对象,页面级的变量,我想存在viewstate中,但是提示 反序列化错误,
于是将User类定义中增加了 [Serializable]
实际上所有的类定义中都增加了 [Serializable] 标记
但是由于使用了LINQ TO SQL
页面还是发生了错误 :
程序集“System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中的类型“System.Data.Linq.EntityRef`1[[EightEdu.Entity.User, EightEdu.Entity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]”未标记为可序列化。
堆栈跟踪:
[SerializationException: 程序集“System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中的类型“System.Data.Linq.EntityRef`1[[EightEdu.Entity.User, EightEdu.Entity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]”未标记为可序列化。]
System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +11488965
System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) +258
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +161
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder) +182
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +419
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +446
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +131
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph) +17
System.Web.UI.ObjectStateFormatter.SerializeValue(SerializerBinaryWriter writer, Object value) +2826
[ArgumentException: 序列化类型“EightEdu.Entity.VerifyInfo”的值“EightEdu.Entity.VerifyInfo”时出错。]
System.Web.UI.ObjectStateFormatter.SerializeValue(SerializerBinaryWriter writer, Object value) +3499
System.Web.UI.ObjectStateFormatter.Serialize(Stream outputStream, Object stateGraph) +144
System.Web.UI.ObjectStateFormatter.Serialize(Object stateGraph, Purpose purpose) +71
System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter2.Serialize(Object state, Purpose purpose) +13
System.Web.UI.Util.SerializeWithAssert(IStateFormatter2 formatter, Object stateGraph, Purpose purpose) +40
System.Web.UI.HiddenFieldPageStatePersister.Save() +106
System.Web.UI.Page.SavePageStateToPersistenceMedium(Object state) +108
System.Web.UI.Page.SaveAllState() +606
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1139
其中 VerifyInfo是User的子类
在VerifyInfo有如下定义
/// <summary>
/// 关联父类:用户
/// 关联父类或者一对一子类
/// </summary>
private EntityRef<User> _User = new EntityRef<User>();
/// <summary>
/// 关联父类:用户
/// </summary>
[global::System.Data.Linq.Mapping.AssociationAttribute(Name="User_VerifyInfo", Storage="_User", ThisKey="userId", OtherKey="id", IsForeignKey=true)]
public User User
{
get
{
return this._User.Entity;
}
set
{
User previousValue = this._User.Entity;
if (((previousValue != value)
|| (this._User.HasLoadedOrAssignedValue == false)))
{
this.SendPropertyChanging();
if ((previousValue != null))
{
this._User.Entity = null;
//若是一对一子类,则SetNull,若是父类则Remove
previousValue.VerifyInfo.Remove(this);
}
this._User.Entity = value;
if ((value != null))
{
value.VerifyInfo.Add(this);
this._userId = value.id;
}
else
{
this._userId = default(int);
}
this.SendPropertyChanged("User");
}
}
}
在User类有如下定义
/// <summary>
/// 关联子类:验证信息
/// 一对多 关联子类
/// </summary>
private EntitySet<VerifyInfo> _VerifyInfo = new EntitySet<VerifyInfo>();
/// <summary>
/// 关联子类:验证信息
/// 一对多 关联子类
/// </summary>
[global::System.Data.Linq.Mapping.AssociationAttribute(Name="User_VerifyInfo", Storage="_VerifyInfo", ThisKey="id", OtherKey="userId")]
public EntitySet<VerifyInfo> VerifyInfo
{
get
{
return this._VerifyInfo;
}
set
{
this._VerifyInfo.Assign(value);
}
}
参考帖子:http://bbs.csdn.net/topics/300073755
或者有没有其它 的办法 在页面存储复杂的对象,除了viewstaste