【发布时间】:2010-11-08 20:46:58
【问题描述】:
我有许多要序列化和反序列化的类。我正在尝试创建一个函数,给定类型(“用户”、“管理员”、“文章”等)将使用这些项目的列表反序列化文件。例如:
/* I want to be able to do this */
List<Article> allArticles = GetAllItems(typeof(Article));
我不知道如何实现上述目标,但我设法让它发挥作用:
/* BAD: clumsy method - have to pass a (typeof(List<Article>))
instead of typeof(Article) */
List<Article> allArticles = (List<Article>)GetAllItems(typeof(List<Article>));
/* Then later in the code... */
public static IList GetAllItems(System.Type T)
{
XmlSerializer deSerializer = new XmlSerializer(T);
TextReader tr = new StreamReader(GetPathBasedOnType(T));
IList items = (IList) deSerializer.Deserialize(tr);
tr.Close();
return items;
}
问题是我必须通过“丑陋”typeof(List<Article>) 而不是“漂亮”typeof(Article)。
当我尝试这个时:
List<User> people = (List<User>)MasterContactLists.GetAllItems(typeof(User));
/* Followed by later in the code...*/
public static IList GetAllItems(System.Type T)
{
XmlSerializer deSerializer = new XmlSerializer(typeof(List<T>));
TextReader tr = new StreamReader(GetPathBasedOnType(T));
IList items = (IList)deSerializer.Deserialize(tr);
tr.Close();
return items;
}
...我收到一个错误
/*Error 3
The type or namespace name 'T' could not be found
(are you missing a using directive or an assembly reference?)
on this line: ... = new XmlSerializer(typeof(List<T>)); */
问题:如何修复我的GetAllItems() 以便能够像这样调用函数并让它返回一个列表:
List<Article> allArticles = GetAllItems(typeof(Article));
谢谢!
【问题讨论】:
标签: c# asp.net xml-serialization xml-deserialization generic-list