Проблема в сопоставлении свойства из таблицы данных excel в список
I have testdata model, and I want to map the column values to existing class hierarchy property's and currently it is not mapping the values and shows NULL value For instance in test data model i have field paymentOptions and in excel sheet the value is KlarnaOptions but after the map of datatable to list - the value of paymentOptions is showing NULL Test Data Model
Что я уже пробовал:
<pre>namespace AutoFramework.Model.Excel { public partial class TestDataModel { public TestDataModel() { } [DataNames("TestName")] public string TestName { get; set; } [DataNames("productId")] public int productId { get; set; } [DataNames("orderId")] public int orderId { get; set; } [DataNames("designMethod")] public DesignMethod designMethod { get; set; } [DataNames("signedIn")] public bool signedIn { get; set; } [DataNames("increaseBasketQty")] public bool increaseBasketQty { get; set; } [DataNames("signedInCMS")] public bool signedInCMS { get; set; } [DataNames("editable")] public bool editable { get; set; } [DataNames("paymentOptions")] public PaymentOptions paymentOptions { get; set; } [DataNames("checkInVoice")] public bool checkInVoice { get; set; } [DataNames("navigateToDesign")] public bool navigateToDesign { get; set; } [DataNames("checkOrderAuthorsie")] public bool checkOrderAuthorsie { get; set; } [DataNames("checkSplitOrder")] public bool checkSplitOrder { get; set; } [DataNames("SiteId")] public string SiteId { get; set; } [DataNames("SiteUrl")] public string SiteUrl { get; set; } [DataNames("CultureCode")] public string CultureCode { get; set; } [DataNames("SiteGroupId")] public string SiteGroupId { get; set; } [DataNames("NickName")] public string NickName { get; set; } [DataNames("byCard")] public KlarnaOptions byCard { get; set; } [DataNames("payLater")] public bool payLater { get; set; } [DataNames("sliceIt")] public bool sliceIt { get; set; } [DataNames("portal")] public PaymentPortal portal { get; set; } [DataNames("delivery")] public DeliveryMethod delivery{get;set;} } }
Mapper for converting Datatable to list
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Framework.Model.Excel { public class DataNamesMapper<TEntity> where TEntity : class, new() { public TEntity Map(DataRow row) { TEntity entity = new TEntity(); return Map(row, entity); } public TEntity Map(DataRow row, TEntity entity) { var columnNames = row.Table.Columns.Cast<DataColumn>().Select(x => x.ColumnName).ToList(); var properties = (typeof(TEntity)).GetProperties() .Where(x => x.GetCustomAttributes(typeof(DataNamesAttribute), true).Any()) .ToList(); foreach (var prop in properties) { PropertyMapHelper.Map(typeof(TEntity), row, prop, entity); } return entity; } public IEnumerable<TEntity> Map(DataTable table) { List<TEntity> entities = new List<TEntity>(); var columnNames = table.Columns.Cast<DataColumn>().Select(x => x.ColumnName).ToList(); var properties = (typeof(TEntity)).GetProperties() .Where(x => x.GetCustomAttributes(typeof(DataNamesAttribute), true).Any()) .ToList(); foreach (DataRow row in table.Rows) { TEntity entity = new TEntity(); foreach (var prop in properties) { PropertyMapHelper.Map(typeof(TEntity), row, prop, entity); } entities.Add(entity); } return entities; } } } Existing Property Type: public class PaymentOptions { public PaymentPortal portal; public DeliveryMethod delivery = DeliveryMethod.Billing; public PaymentOptions() { } public PaymentOptions(Site site) { } } public class KlarnaOptions : PaymentOptions { //default - don't use card payment by deffault public bool byCard = false; public bool payLater = false; public bool sliceIt = false; public KlarnaOptions() { portal = PaymentPortal.Klarna; } }