我有一个小型集成服务,可以接收 XML 文件并对其进行解析。 我还从提供的 XSD 创建了用于反序列化 XML 数据的类。在解析过程中,我需要将那些 XSD 生成的类的属性复制到我自己的、我在数据层中使用的类中。这是我的方法的一个例子
var supplierInfo = new SupplierInfo();
//coping properties
supplierInfo.Name = supplier.name;
supplierInfo.ShortName = supplier.shortName;
supplierInfo.BrandName = supplier.brandName;
supplierInfo.AdditionalFullName = supplier.additionalFullName;
supplierInfo.AdditionalCode = supplier.additionalCode;
supplierInfo.AdditionalInfo = supplier.additionalInfo;
//lot's of other properties
//...
supplierInfo.Tax = supplier.tax;
supplierInfo.RegistrationDate = supplier.registrationDate;
有时属性的数量非常大。是否有更合适的方法来复制这些属性?
最佳答案
Automapper 很久以前就存在了。尝试和测试。 http://automapper.org/
这是一个例子:
using System;
using AutoMapper;
public class Program
{
class SupplierInfo
{
public SupplierInfo( string name, string shortName, string brandName ) {
Name = name;
ShortName = shortName;
BrandName = brandName;
}
public string Name {get; private set; }
public string ShortName {get; private set; }
public string BrandName {get; private set; }
}
class Supplier
{
public string name {get; set; }
public string shortName {get; set; }
public string brandName {get; set; }
}
public static void Main()
{
var dto = new Supplier() {
name = "Name 1",
shortName = "Short Name 1",
brandName = "Brand Name 1"
};
//From the tutorial:
//You only need one MapperConfiguration instance typically per AppDomain and should be instantiated during startup.
var config = new MapperConfiguration(cfg => cfg.CreateMap<Supplier, SupplierInfo>());
var mapper = config.CreateMapper();
SupplierInfo info = mapper.Map<SupplierInfo>(dto);
Console.WriteLine( info.Name );
Console.WriteLine( info.ShortName );
Console.WriteLine( info.BrandName );
}
}
可以在 https://github.com/AutoMapper/AutoMapper/wiki/Getting-started 找到官方入门指南。
关于c# - 将属性从对象复制到另一个的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35522456/