【问题标题】:serialization of entity model c#实体模型的序列化c#
【发布时间】:2012-06-11 22:58:00
【问题描述】:

我在序列化时不时收到此错误,我不知道我需要序列化哪个文件。 页面在加载其他时间时打开和关闭。 这是我得到的错误:

System.Web.HttpException (0x80004005):无法序列化会话 状态。在“StateServer”和“SQLServer”模式下,ASP.NET 将序列化 会话状态对象,因此是不可序列化的对象或 不允许 MarshalByRef 对象。同样的限制适用 如果类似的序列化由自定义会话状态存储完成 '自定义模式。 ---> System.Runtime.Serialization.SerializationException:类型 'System.Data.Entity.DynamicProxies.Product_CC06DC79809AC788823D74B88F94CCB7155ADCE697911AF73214FB8B5F2B2EB4' 在大会'EntityFrameworkDynamicProxies-Nop.BusinessLogic, Version=1.0.0.0,Culture=neutral,PublicKeyToken=null' 未标记 作为可序列化的。在 System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType 类型)在 System.Runtime.Serialization.FormatterServices.GetSerializableMembers(类型 类型,StreamingContext 上下文)在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() 在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(对象 obj,ISurrogateSelector surrogateSelector,StreamingContext 上下文, SerObjectInfoInit serObjectInfoInit,IFormatterConverter 转换器, ObjectWriter objectWriter, SerializationBinder binder) 在 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo 对象信息,名称信息成员名称信息,名称信息类型名称信息)在 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(对象 图,Header[] inHeaders,__BinaryWriter serWriter,布尔 fCheck)
在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(流 序列化流、对象图、Header[] 标头、布尔 fCheck)
在 System.Web.Util.AltSerialization.WriteValueToStream(对象值, BinaryWriter 作家)在 System.Web.Util.AltSerialization.WriteValueToStream(对象值, BinaryWriter 作家)在 System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert(对象 值,BinaryWriter 写入器)在 System.Web.SessionState.SessionStateItemCollection.Serialize(BinaryWriter 作家)在 System.Web.SessionState.SessionStateUtility.Serialize(SessionStateStoreData 项目,流流)在 System.Web.SessionState.SessionStateUtility.SerializeStoreData(SessionStateStoreData item, Int32 initialStreamSize, Byte[]& buf, Int32& length, Boolean 压缩启用)在 System.Web.SessionState.SqlSessionStateStore.SetAndReleaseItemExclusive(HttpContext 上下文、字符串 id、SessionStateStoreData 项、对象 lockId、布尔值 新项目)在 System.Web.SessionState.SessionStateModule.OnReleaseState(对象 源,EventArgs eventArgs)在 System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤, Boolean & completedSynchronously)

所以基本上我认为是实体模型,但我想知道如何序列化它。 在此先感谢 Laziale

【问题讨论】:

  • 是否需要序列化整个实体?将唯一 ID 存储在会话中并从数据库中检索实体本身可能会更好。
  • 顺便说一句,DataContractSerializer 是否适用于您的对象?如果是这样,另一种选择是:使用DataContractSerializer 序列化并仅存储输出
  • +1 用于数据合约序列化程序。
  • 为什么需要这样做?这种错误通常是可以通过其他方式正确完成的事情的症状。

标签: c# asp.net entity-framework serialization entity


【解决方案1】:

System.Data.Entity.DynamicProxies.Product(此类错误)

应该在类上添加 [DataContract] 属性,在类似的字段上添加 [DataMember]

using System.Runtime.Serialization;
[DataContract]
public class Account
{
    [DataMember]
    public System.Guid ID { get; set; }
    [DataMember]
    public System.Guid AccountSubTypeID { get; set; }
    [DataMember]
    public Nullable<int> IndustryTypeID { get; set; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多