幾天前我不得不將數據從xml文件反序列化到我的List類。 我的方法是這樣的:上面如何將DataTable行集合反序列化到列表中<T>
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會幫助我。所以請指導我反序列化數據表數據到我的客戶類列表。
我不能直接分配,而不是選擇新的客戶{ID = c.Field(「CustomerID」),這樣.... plzz討論。 –