将C# DataTable转换为实体类对象实例是一个很常见的操作,下面是详细的攻略。
步骤一:创建实体类
首先创建一个实体类,其中的属性需要与DataTable里面的字段名称和数据类型一一对应。
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
步骤二:获取DataTable数据
使用Ado.Net或者第三方库获取数据并存储在DataTable中。
using (var conn = new SqlConnection("Your Connection String"))
{
conn.Open();
var command = new SqlCommand("SELECT * FROM Persons", conn);
var table = new DataTable();
var reader = command.ExecuteReader();
table.Load(reader);
reader.Dispose();
conn.Close();
}
步骤三:将DataTable转换为json字符串
可以使用Json.Net将DataTable转换为Json字符串,以便于后续操作。
var json = JsonConvert.SerializeObject(table);
步骤四:将json字符串反序列化为实体对象
使用Json.Net反序列化json字符串将其转换为实体对象的List。
var list = JsonConvert.DeserializeObject<List<Person>>(json);
示例一:使用System.Xml.Serialization
using System.Xml.Serialization;
using System.IO;
public static List<T> ConvertDataTableToEntityList<T>(DataTable table)
{
var xml = "";
using (var memoryStream = new MemoryStream())
{
using (TextWriter streamWriter = new StreamWriter(memoryStream))
{
table.WriteXml(streamWriter);
xml = Encoding.UTF8.GetString(memoryStream.ToArray());
}
}
using (var stringReader = new StringReader(xml))
{
var ser = new XmlSerializer(typeof(List<T>));
return (List<T>)ser.Deserialize(stringReader);
}
}
示例二:使用Reflection
using System.Reflection;
public static List<T> ConvertDataTableToEntityList<T>(DataTable table) where T : new()
{
var list = new List<T>();
var type = typeof(T);
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList();
foreach (var row in table.Rows)
{
var obj = new T();
foreach (var property in properties)
{
if (table.Columns.Contains(property.Name) && row[property.Name] != DBNull.Value)
{
var value = Convert.ChangeType(row[property.Name], property.PropertyType);
property.SetValue(obj, value, null);
}
}
list.Add(obj);
}
return list;
}
以上就是将C# DataTable转换为实体类对象实例的完整攻略,其中包含了两个示例来作详细讲解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# DataTable 转换为 实体类对象实例 - Python技术站