C# 将IEnumerable添加到ViewState
您需要将Employee类标记为可序列化。Session/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
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());