AutoMapper in C#

最近做excel导入导出的功能,下面是一些代码笔记。使用的是EPPlus
对于全string型的自动转换可以采用AutoMapper。简单也方便理解。需要注意的是XExcelModel, XItem的命名需要保证一定的相似性

public static class AutoMapperConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(cfg =>
        {
            cfg.AddProfile(new ModelProfile());
        });
    }
}

// 继承AutoMapper.Profile
public class ModelProfile : Profile
{
    protected override void Configure()
    {
        // 类型转换
        CreateMap<string, Type>().ConvertUsing(new StringTypeConverter());
        CreateMap<string, int>().ConvertUsing(new StringIntConverter());
        // XExcelModel -> XItem转换
        CreateMap<XExcelModel, XItem>();
        // XItem -> XExcelModel转换
        CreateMap<XItem, XExcelModel>();
    }
}

public class StringTypeConverter : ITypeConverter<string, Type>
{
    public Type Convert(string source, ResolutionContext context)
    {
        return Type.GetType(source);
    }
}

public class StringIntConverter : ITypeConverter<string, int>
{
    public int Convert(string source, ResolutionContext context)
    {
        int value;
        var result = Int32.TryParse(source, out value);
        return result ? value : default(int);
    }
}

// 调用
public void Test()
{
    AutoMapperConfiguration.Configure();
    var excelRecords = Mapper.Map<List<XItem>, List<XExcelModel>>(entities);
}

获取工程目录里的文件

var myAssembly = Assembly.GetExecutingAssembly();
Stream stream = myAssembly.GetManifestResourceStream("工程名.XXX.XXX.文件名");

读excel到model里时的类型处理

private static T ConvertToObject<T>(List<string> columnValues, List<string> rowCellValues)
{
    T obj = Activator.CreateInstance<T>();
    foreach (PropertyInfo pi in obj.GetType().GetProperties())
    {
        for (int index = 0; index < columnValues.Count; index++)
        {
            var displayName = TypeExtensions.GetDisplayName(typeof(T), pi.Name);
            if (displayName.Equals(columnValues[index], StringComparison.OrdinalIgnoreCase))
            {
                String propertyType = pi.PropertyType.Name;
                switch (propertyType)
                {
                    case "Int32":
                        pi.SetValue(obj, int.Parse(rowCellValues[index]), null);
                        break;
                    case "DateTime":
                        pi.SetValue(obj, DateTime.Parse(rowCellValues[index]), null);
                        break;
                    case "Decimal":
                        pi.SetValue(obj, Decimal.Parse(rowCellValues[index]), null);
                        break;
                    case "Double":
                        pi.SetValue(obj, Double.Parse(rowCellValues[index]), null);
                        break;
                    case "String":
                        pi.SetValue(obj, rowCellValues[index], null);
                        break;
                    case "Boolean":
                        pi.SetValue(obj, Boolean.Parse(rowCellValues[index]), null);
                        break;
                }
                break;
            }
        }
    }
    return obj;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值