C#-映射器和配置文件

C#-映射器和配置文件,c#,automapper,configuration-files,C#,Automapper,Configuration Files,我有两门课: public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public Product Product { get; set; } } public class Product { public int ProductNumber { get; set; } public string Produ

我有两门课:

public class Customer
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public Product Product { get; set; }
}

public class Product
{
    public int ProductNumber { get; set; }

    public string ProductColor { get; set; }
}


public class Customer_
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public Article Article { get; set; }
}

public class Article
{
    public int ArticleNumber { get; set; }

    public string ArticleColor { get; set; }
}
还有一个例子:

Customer Cus = new Customer()
{
    FirstName = "FirstName1",
    LastName = "LastName1",
    Product = new Product()
    {
        ProductColor = "ProductColor1",
        ProductNumber = 11
    }
};
我想从我的实例
Cus

我使用Automapper:

MapperConfiguration Config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Customer, Customer_>()
    .ForMember(a => a.Article, b => b.MapFrom(c => c.Product));

    cfg.CreateMap<Product, Article>()
    .ForMember(a => a.ArticleColor, b => b.MapFrom(c => c.ProductColor))
    .ForMember(a => a.ArticleNumber, b => b.MapFrom(c => c.ProductNumber));                
});

IMapper Mapper = Config.CreateMapper();
var cus_ = Mapper.Map<Customer, Customer_>(Cus);
MapperConfiguration Config=新的MapperConfiguration(cfg=>
{
cfg.CreateMap()
.ForMember(a=>a.Article,b=>b.MapFrom(c=>c.Product));
cfg.CreateMap()
.FormMember(a=>a.ArticleColor,b=>b.MapFrom(c=>c.ProductColor))
.ForMember(a=>a.ArticleNumber,b=>b.MapFrom(c=>c.ProductNumber));
});
IMapper Mapper=Config.CreateMapper();
var cus=映射器.Map(cus);
它可以工作,但我想从配置文件创建MapperConfiguration。像这样:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <Automapper>
    <Column source="Product" destination="Article"/>
    <Column source="Product.ProductColor" destination="Article.ArticleColor"/>
    ...
    ...
    ...
  </Automapper>
</configuration>

...
...
...

有可能吗?

使用AutoMapper无法做到这一点,但使用基于类型的AutoMapper版本,您当然可以做到:

cfg.CreateMap(typeof(Customer), typeof(Customer_))
    .ForMember("Product").MapFrom("Article");
因此,您只需要在XML中循环,加载类型,并为每个子节点调用MapFrom以获得您拥有的两个字符串

您的XML看起来不够完整,无法做到这一点,您需要有如下内容:

<TypeMap SourceType="Customer" DestinationType="Customer_">
    <PropertyMap Member="Product" MapFrom="Article">
</TypeMap>


等等。

几乎任何事情都有可能。如果此链接有帮助,请告诉我