Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 强类型数据集的序列化_Asp.net_.net_Vb.net_Appfabric - Fatal编程技术网

Asp.net 强类型数据集的序列化

Asp.net 强类型数据集的序列化,asp.net,.net,vb.net,appfabric,Asp.net,.net,Vb.net,Appfabric,有人知道如何使强类型数据集(我不想使用它们)可序列化,以便我可以使用AppFabric Server作为会话状态提供程序来存储它们吗?我使用InProc会话状态已经有一段时间了,没有任何问题。当我将会话状态移出AppFabric服务器时,我发现强类型数据集存在一些问题。我不断收到一个错误,告诉我我的数据集不可序列化。我已经检查过了,它们上面有Serializable属性,它们只包含可序列化的数据类型(int,string,等等),有什么想法吗 编辑:以下是堆栈跟踪: System.Runtime

有人知道如何使强类型数据集(我不想使用它们)可序列化,以便我可以使用AppFabric Server作为会话状态提供程序来存储它们吗?我使用InProc会话状态已经有一段时间了,没有任何问题。当我将会话状态移出AppFabric服务器时,我发现强类型数据集存在一些问题。我不断收到一个错误,告诉我我的数据集不可序列化。我已经检查过了,它们上面有
Serializable
属性,它们只包含可序列化的数据类型(
int
string
,等等),有什么想法吗

编辑:以下是堆栈跟踪:


System.Runtime.Serialization.SerializationException:未找到用于反序列化类型为“DataSetClasses.MyStronglyTypedDataset”的对象的构造函数。-->System.Runtime.Serialization.SerializationException:未找到用于反序列化类型为“DataSetClasses.MyStronglyTypedDataset”的对象的构造函数。在System.Runtime.Serialization.ObjectManager.GetConstructor(RuntimeType t,RuntimeType[]ctorParams)在System.Runtime.Serialization.ObjectManager.CompleteSerializableObject(对象obj,SerializationInfo,StreamingContext上下文)---内部异常堆栈跟踪的结束---在System.Runtime.Serialization.ObjectManager.CompleteSerializableObject(对象obj、SerializationInfo、StreamingContext上下文)在System.Runtime.Serialization.ObjectManager.FixupSpecialObject(对象持有者)在System.Runtime.Serialization.ObjectManager.DoFixups()中在System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler处理程序、\uu BinaryParser serParser、Boolean fCheck、Boolean isCrossAppDomain、IMethodCallMessage methodCallMessage)在System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(System.Web.Util.AltSerialization.ReadValueFromStream(BinaryReader reader)中的System.Web.SessionState.SessionStateItemCollection.ReadValueFromStream(BinaryReader reader)中的流序列化流、HeaderHandler处理程序、布尔fCheck、布尔isCrossAppDomain、IMethodCallMessage)位于System.Web.SessionState.SessionStateItemCollection.System.Web.SessionState.SessionStateItemCollection.get_项(字符串名称)位于System.Web.SessionState.HttpSessionStateContainer.get_项(字符串名称)位于System.Web.SessionState.HttpSessionState.get_项(字符串名称)在appt.T2SharedLibrarySetup.btnSave\u中,单击D:\Application\ProblemFile.aspx.vb中的(对象发送者,事件参数e):System.Web.UI.WebControl.Button.OnClick(事件参数e)中的第331行System.Web.UI.WebControl.Button.RaisePostBackEvent(字符串事件参数)在System.Web.UI.WebControl.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)在System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)上在System.Web.UI.Page.RaisePostBackEvent中,在尝试将对象放入会话(然后放入AppFabric)之前,请先尝试将对象序列化/反序列化为字节数组。下面是一个示例

        private static BinaryFormatter formatter = null;

    private static Byte[] Serialize(object entity)
    {
        Logger.LogDebug(Category.Cache, "Serializing");
        Byte[] bytes;
        if (formatter == null) formatter = new BinaryFormatter();
        using (MemoryStream stream = new MemoryStream())
        {
            formatter.Serialize(stream, entity);
            bytes = stream.ToArray();
        }
        return bytes;
    }

    private static object DeSerialize(Byte[] bytes)
    {
        #region Sanitation
        if (bytes == null) { throw new System.ArgumentNullException("bytes"); }
        #endregion
        Logger.LogDebug(Category.Cache, "DeSerializing");
        object obj;
        if (formatter == null) formatter = new BinaryFormatter();
        using (MemoryStream stream = new MemoryStream(bytes))
        {
            obj = formatter.Deserialize(stream);
        }
        return obj;
    }

从反序列化程序获取对象后,尝试将其转换回类型化数据集类型。

您可以使用dataset.ReadXML()或WriteXML()函数以实现所需的功能。

您能发布您获得的异常堆栈跟踪吗?这篇文章可能很有意义:-这是一个强类型数据集,通过在Visual Studio中添加一个数据集,然后将一个表/存储过程拖放到设计图面上来创建。我需要创建一个序列化/反序列化此内置Visual Studio功能。我建议这样做的原因是,如果您自己对其进行二进制序列化,您将删除对appfabric客户端的依赖关系,该客户端将检查您的对象并尝试找出如何序列化对象本身。例如,如果客户端在任何成员上找到WCF数据批注属性在您的类中,它将尝试使用NetDataContractSerializer,您可能不希望这样做。