我遵循LINQ声明:
string[] str = { "a", "ab", "abcd" };
var s1 = from s in str.AsEnumerable()
select s;
ViewState.Add("str", s1);
我在s1
中添加了ViewState
,我收到了以下错误:
类型 “System.Linq.Enumerable + WhereSelectArrayIterator`2 [[System.String, mscorlib,版本= 2.0.0.0,文化=中性, PublicKeyToken = b77a5c561934e089],[System.String,mscorlib, Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]' 在Assembly'System.Core,Version = 3.5.0.0,Culture = neutral, PublicKeyToken = b77a5c561934e089'未标记为可序列化。
如何解决此问题以及如何将LINQ变量添加到ViewState
?
答案 0 :(得分:5)
你不能直接这样做,因为你想要添加到ViewState
的任何内容必须是可序列化的(用SerializableAttribute
标记),正如编译器告诉你的那样。 s1
的运行时类型是System.Linq.Enumerable
中的嵌套泛型类,它没有该属性。
您可以做的一件事是在添加变量之前调用.ToArray()
(或其他类似的方法):
string[] str = { "a", "ab", "abcd" };
var s1 = from s in str.AsEnumerable() select s;
ViewState.Add("str", s1.ToArray());
当然,这是毫无意义的,因为你可以用
达到同样的效果string[] str = { "a", "ab", "abcd" };
ViewState.Add("str", str);
总的来说,从示例中不清楚你想要在这里实现什么。
答案 1 :(得分:1)
您已有一个数组,因此请在ViewState中存储str
。
ViewState.Add("str", str);