c# - 将属性从对象复制到另一个的优雅方式

标签 c# .net

我有一个小型集成服务,可以接收 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/

相关文章:

c# - 空合并运算符,不可预测的行为

c# - 构建 LINQ 查询以从字符串字典/字符串字典/字符串字典中获取字典列表?

c# - c#中的lambda表达式和var关键字

c# - WPF ListView 通过标题模板与扩展器分组?

c# - 我应该强制异常(exception)来测试它们吗?

c# - 如何添加类型约束以在泛型方法中包含任何可序列化的内容?

c# - 使用 .NET 设置属性值的通用方法

.net - WCF Service Trace Viewer 工具是不可或缺的吗?

c# - 为什么 C# 编译器不自动推断此代码中的类型?

c# - 如何在每个第二个引号处拆分