使用AutoMapper将DataRow转换为Object

我可以成功地从IDataReader映射到对象列表,但是当我想要一个DataRow它似乎没有按预期工作。

我错过了一些简单的东西吗?

[TestFixture] public class AutomapperTest { [Test] public void TestMethod1() { DataTable dt = new DataTable("contact"); dt.Columns.Add("FirstName"); dt.Columns.Add("LastName"); dt.Columns.Add("Line1"); dt.Columns.Add("Line2"); dt.Columns.Add("Line3"); dt.Columns.Add("Suburb"); dt.Columns.Add("State"); dt.Columns.Add("Postcode"); DataRow row = dt.NewRow(); row.ItemArray = new [] { "Little", "Johnny", "1 Random Place", "", "", "Windsor", "Qld", "4030" }; var dest = Mapper.DynamicMap(row); Assert.AreEqual(row["FirstName"], "Little"); Assert.IsNotNull(dest); Assert.AreEqual(dest.FirstName, "Little"); } } 

目的地类型:

 public class myObject { public string FirstName { get; set; } public string LastName { get; set; } public string Line1 { get; set; } public string Line2 { get; set; } public string Line3 { get; set; } public string Suburb { get; set; } public string State { get; set; } public string Postcode { get; set; } } 

您必须实现自己的自定义值解析器

https://github.com/AutoMapper/AutoMapper/wiki/Custom-value-resolvers

UPDATE

 public class CustomResolver : IValueResolver { public ResolutionResult Resolve(ResolutionResult source) { return source.New( Convert.ChangeType((source.Context.SourceValue as DataRow)[source.Context.MemberName], source.Context.DestinationType)); } } 

以下是如何使用它

 Mapper.CreateMap().ForAllMembers(m=>m.ResolveUsing()); var dest = Mapper.Map(row); 

我建议使用Dapper。 这样,来自数据库的数据将是强类型或动态的,Automapper应该能够找出映射。

我相信Dapper可以通过ODBC读取CSV文件。 但对于CSV,我建议使用LinqToCSV Nuget软件包。