Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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# 将IEnumerable添加到ViewState_C#_Asp.net_Linq_Viewstate - Fatal编程技术网

C# 将IEnumerable添加到ViewState

C# 将IEnumerable添加到ViewState,c#,asp.net,linq,viewstate,C#,Asp.net,Linq,Viewstate,您需要将Employee类标记为可序列化。Session/ViewState通过序列化复杂对象来保存它们,因此需要将它们标记为复杂对象 Error : Assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a534e089' is not marked as serializable. 除了将Employee标记为可序列化(Douglas的回答)之外,集合本身也必须是可序列化的。例如,如果您的Fun

您需要将Employee类标记为可序列化。Session/ViewState通过序列化复杂对象来保存它们,因此需要将它们标记为复杂对象

Error : Assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a534e089' is not marked as serializable.

除了将
Employee
标记为可序列化(Douglas的回答)之外,集合本身也必须是可序列化的。例如,如果您的
Function1
方法使用
yield return
返回,而不是返回具体的集合,那么您仍然会遇到问题。如果它返回一个数组,它应该很好地序列化-但是由于签名只是
IEnumerable
,所以您不能指望返回的是什么类型

例如:

[Serializable]
public class Employee
private静态IEnumerable Function1(){
收益返回新员工{Id=1,Name=“John”};
收益返回新员工{Id=2,Name=“Mary”};
}
Add(“str”,Source1.ToArray());

这将确保无论您使用的是哪种类型,您都在序列化一个简单的数组。

Session/ViewState通过序列化来保存复杂的对象,因此需要将它们标记为这样。突然,它不再工作了。当它运行时,我一定是弄错了。我更新了代码,你能帮我解决这个问题吗?
ViewState.Add(“str”,Source1.ToList())好的观点。我主张在试图将数据保存到会话之前,确保您处理的是具体类型。@Joe,当我包含函数1时,您是对的,它不起作用。我用Function1更新了我的答案,你能指导我吗?你仍然需要这两种解决方案-你必须用
[Serializable]
标记
Employee
,并且你必须确保你将对象添加为数组或列表,而不是IEnumerable。
Error : Assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a534e089' is not marked as serializable.
[Serializable]
public class Employee
private static IEnumerable<Employee> Function1() {
    yield return new Employee { Id = 1, Name = "John" };
    yield return new Employee { Id = 2, Name = "Mary" };
}

ViewState.Add("str", Source1.ToArray());