Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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
如何在C#ASP.Net会话中保存对象数组?_C#_Asp.net_Session - Fatal编程技术网

如何在C#ASP.Net会话中保存对象数组?

如何在C#ASP.Net会话中保存对象数组?,c#,asp.net,session,C#,Asp.net,Session,我的C#ASP.Net程序中有一个对象数组,在回发期间填充这些对象,我希望在下一次回发期间恢复它们。为此,我将数组声明包括在默认类定义中,这样保存:- this.Session["This"] = this; 并已恢复:- Default saved_stuff = (Default) this.Session["This"]; 这适用于除以下各项之外的所有方面:- MyClass [] my_array; 恢复时,已保存内容。我的\u数组始终为null MyClass的定义如下:- pu

我的C#ASP.Net程序中有一个对象数组,在回发期间填充这些对象,我希望在下一次回发期间恢复它们。为此,我将数组声明包括在默认类定义中,这样保存:-

this.Session["This"] = this;
并已恢复:-

Default saved_stuff = (Default) this.Session["This"];
这适用于除以下各项之外的所有方面:-

MyClass [] my_array;
恢复时,
已保存内容。我的\u数组始终为
null

MyClass的定义如下:-

public MyClass : ISerializable
{
    private string some_string;
    private double some_double;
    // some more simple members
    // Some getters and setters
    // ISerializable Implementation
}
我试过让
MyClass
实现
ISerializable
,但这没有任何区别。有人知道我应该做什么吗

编辑要回答@Michael的问题,我会做一些事情,比如

for (int i = 0; i <= saved_stuff.my_array.GetUpperBound(0); i++)
{
    // blah blah
}
for(int i=0;i根据,如果您将会话状态存储在内存中(默认),则它不需要可序列化

当您使用非会话状态模式时,会话变量类型必须为原始.NET类型或可序列化。这是因为会话变量值存储在外部数据存储中

我怀疑有什么东西正在清除阵列,记住了吗

this.Session["This"] = this;
当使用内存会话状态时,不会创建页面对象的副本,因此对页面对象(“
this
”)所做的任何更改也将对“saved”对象进行更改。因此,如果设置
this.\u saved\u stuff=null
,则保存对象的属性也将为null

我不会尝试在会话中存储页面,而是选择要保存的值并显式保存它们


此外,如果希望在下一次回发中可以恢复这些值,您可能需要选择
ViewState
。使用
Session
确实会有在回发之间销毁会话的风险。这可能很少见,但这是一种考虑。

首先,您应该知道在Asp.net Web应用程序中e是三种类型的会话状态 1.进行中 2.状态服务器 3.在数据库中


如果会话状态正在处理中(即defalut),或者需要将对象标记为可序列化,则可以将对象直接保存到会话中,这样可以将对象保存到状态服务器或数据库中(在配置文件中设置)

您必须将数组数据存储在其自己的会话对象中:

MyClass[] my_array = //Something

Session["ArrayData"] = my_array;
然后将其检索为:

var arrayData = (MyClass[])Session["ArrayData"];

谢谢你的提示。我会检查,但我怀疑我是无意中清除了数组。这个问题会影响所有的类数组。本机类型、本机类型数组、结构和结构数组都会像我预期的那样返回,但是所有的类数组都显示了这个问题。Iserializable与此无关您没有写入磁盘。您的数组真的很大吗?或者检索数据花费了很长时间吗?可能是服务器过载。这似乎是一个非常奇怪的问题。@MrFox,数组有十几个元素,我正在开发我的开发机器,很抱歉,它没有过载。您检索数组的代码是什么会话?你说它不工作——但它是什么?啊,你从来没有直接存储或检索数组。这就是让我感到困惑的地方。现在仍然如此,看看上面。很漂亮。很高兴能帮上忙。