private IEnumerable<Employee> Source1;
Source1 = Function1(); // Returns Ienumerable<Employee>
ViewState.Add("str", Source1); //ERROR HERE
更新
功能1
public static IEnumerable<Employee> Function1(string id)
{
IEnumerable<Employee> all;
DB db = new DB(id);
all = db.GetValues()
.OrderByDescending(date => date.Created);
return all;
}
public List<Employee> GetValues()
{
List<string> li = database.GetFilters(id, dID.Request);
IEnumerable<Employee> requests = Employee.GetRequests();
List<Employee> li1 = new List<Employee>();
foreach (string pF in li)
{
li1.AddRange(requests.Where(r => r.result == pF).ToList());
}
return li1;
}
我需要使这个函数可序列化吗?
这里,在编译时没有错误,但在页面加载时,我收到错误。
Error : Assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a534e089' is not marked as serializable.
答案 0 :(得分:2)
您需要将Employee类标记为可序列化。 Session / ViewState通过序列化来保存复杂对象,因此需要对它们进行标记。
[Serializable]
public class Employee
答案 1 :(得分:2)
除了Employee
被标记为可序列化(道格拉斯的回答)之外,集合本身也必须是可序列化的。例如,如果您的Function1
方法使用yield return
返回而不是返回具体集合,那么您仍然会遇到问题。如果它返回一个数组,它应该序列化很好 - 但由于签名只是IEnumerable<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());
这将确保无论您使用何种类型,都可以序列化一个简单的数组。