2010-03-23 54 views
0

我知道这个错误是什么,如何解决它,等我的对象是如何进入ASP.NET页面状态的?

我的问题是,我不知道为什么我的,我发展当前页面时,我并没有直接使用Foo类引发此错误任何方式,我也不会设置任何视图状态。我使用回发很多,但正如我所说,我不存储视图状态等一个整数的任何东西。

我使用nhibernate,如果这是相关的。

任何想法,为什么我需要将这些类标记为可序列化,不被使用?我应该从哪里开始调查?

[SerializationException: Type 'FlexiCommerce.Persistence.NH.ContentPersister' in Assembly 'FlexiCommerce.Persistence.NH, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.] 
    System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +9434541 
    System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) +247 
    System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +160 
    System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder) +218 
    System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +388 
    System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +444 
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +133 
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph) +13 
    System.Web.UI.ObjectStateFormatter.SerializeValue(SerializerBinaryWriter writer, Object value) +2937 

[ArgumentException: Error serializing value 'Music#2' of type 'FlexiCommerce.Components.Category.'] 
    System.Web.UI.ObjectStateFormatter.SerializeValue(SerializerBinaryWriter writer, Object value) +3252 
    System.Web.UI.ObjectStateFormatter.SerializeValue(SerializerBinaryWriter writer, Object value) +2276 

[ArgumentException: Error serializing value 'System.Object[]' of type 'System.Object[].'] 
    System.Web.UI.ObjectStateFormatter.SerializeValue(SerializerBinaryWriter writer, Object value) +3252 
    System.Web.UI.ObjectStateFormatter.Serialize(Stream outputStream, Object stateGraph) +116 
    System.Web.UI.ObjectStateFormatter.Serialize(Object stateGraph) +57 
    System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Serialize(Object state) +4 
    System.Web.UI.Util.SerializeWithAssert(IStateFormatter formatter, Object stateGraph) +37 
    System.Web.UI.HiddenFieldPageStatePersister.Save() +79 
    System.Web.UI.Page.SavePageStateToPersistenceMedium(Object state) +108 
    System.Web.UI.Page.SaveAllState() +315 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2492 
+2

禁用视图状态/会话,让事情中断,快速了解有状态和无状态之间的区别,拥有一个灯泡时刻,重新思考一切,重新构建它,瞧。抱歉不能抵制。但是就像J桑德斯说它进入你的页面状态不知何故 – 2010-03-23 20:04:44

+0

是的,发布代码。 – Paco 2010-03-23 20:07:35

+0

我知道我的一个对象正在被序列化。我没有意识到有一个隐藏的领域包含了很多的依赖关系。使用[NonSerialized]解决了这个问题。 – 2010-03-24 14:07:33

回答

2

你可能是这种类型的数据绑定的对象?很明显,它以某种方式进入页面状态。

0

我假设你已经为查询缓存启用了一些缓存元素,或者启用了NHibernate的实际对象图缓存(如果可能的话,使用SysCacheProvider这只是HttpRuntime.Cache)。

无论缓存用法还是不要将每个Domain对象标记为可序列化,我都会推荐它,因为它在某些时候会非常合理,以至于它会通过网络或仅进入ViewState/Session容器。