【发布时间】:2011-11-11 07:50:44
【问题描述】:
几天前,我不得不将数据从 xml 文件反序列化到我的 List 类。 我的做法是这样的:
private void button1_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load("Test.xml");
XmlSerializer xs = new XmlSerializer(typeof(UserHolder));
UserHolder uh = (UserHolder)xs.Deserialize(new StringReader(doc.OuterXml));
dataGridView1.DataSource = uh.Users.ToDataTable();
}
public class User
{
[XmlElement("id")]
public Int32 Id { get; set; }
[XmlElement("name")]
public String Name { get; set; }
}
[XmlRoot("user_list")]
public class UserHolder
{
private List<User> users = null;
public UserHolder()
{
users = new List<User>();
}
[XmlElement("user")]
public List<User> Users
{
get { return users; }
set { users = value; }
}
}
public static class Convert2Table
{
public static DataTable ToDataTable<T>(this IList<T> list)
{
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
for (int i = 0; i < props.Count; i++)
{
PropertyDescriptor prop = props[i];
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}
object[] values = new object[props.Count];
foreach (T item in list)
{
for (int i = 0; i < values.Length; i++)
values[i] = props[i].GetValue(item) ?? DBNull.Value;
table.Rows.Add(values);
}
return table;
}
}
上面的代码运行良好,但我不得不写很多行代码。
我现在有一个新情况,我有一个客户类和一个数据表。我的数据表填充了多个客户数据。我想将该数据从数据表反序列化到我的客户类。我怎样才能比以前更有效地做到这一点?我怀疑linq会帮助我。所以请指导我将数据表数据反序列化到我的客户类列表。
【问题讨论】: