C# 空值之间的映射异常?

C# 空值之间的映射异常?,c#,automapper,C#,Automapper,我得到一个例外: 缺少类型映射配置或不支持的映射 映射类型: FollowUpActivityDTO->Nullable1 Elest.Model.FollowUpActivityDTO->System.Nullable1[[System.DateTime,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]] 目标路径: 清单'1[0] 源值: 类后续活动DTO{ 识别号:75e83860-65e4-

我得到一个例外:

缺少类型映射配置或不支持的映射

映射类型: FollowUpActivityDTO->Nullable
1
Elest.Model.FollowUpActivityDTO->System.Nullable
1[[System.DateTime,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]

目标路径: 清单'1[0]

源值:

类后续活动DTO{ 识别号:75e83860-65e4-11e5-9a90-382c4ab9e433 时间戳:28/09/2015 11:28:55 StartTimestamp:28/09/2015 15:26:00 时间戳:28/09/2015 15:26:00 关闭时间戳:28/09/2015 15:26:00 事项:elasticsearch-copia-copia.jar 评论:存档 状态:打开 背景状态:未知 }

当我执行以下操作时,它会引发:

return AutoMapper.Mapper.Map<List<LEST.Model.FollowUpActivityDTO>, List<Domain.FollowUpActivity>>(dtos);
和映射配置文件:

AutoMapper.Mapper.CreateMap<LEST.Model.FollowUpActivityDTO, Domain.FollowUpActivity>()
            .ForMember(dst => dst.CreationDate, opts => opts.Ignore()) //opts.MapFrom(s => s.Timestamp.HasValue ? s.Timestamp.Value : DateTime.MinValue))
            .ForMember(dst => dst.StartDate, opts => opts.Ignore()) //opts.MapFrom(s => s.StartTimestamp.HasValue ? s.StartTimestamp.Value : DateTime.MinValue))
            .ForMember(dst => dst.DueDate, opts => opts.Ignore()) //opts.MapFrom(s => s.DueTimestamp.HasValue ? s.DueTimestamp.Value : DateTime.MinValue))
            .ForMember(dst => dst.ClosingDate, opts => opts.Ignore()) //opts.MapFrom(s => s.ClosingTimestamp.HasValue ? s.ClosingTimestamp.Value : DateTime.MinValue));
            .ForMember(dst => dst.Status, opts => opts.UseValue<Domain.FollowUpActivityStatus>(Domain.FollowUpActivityStatus.Open))
            .ForMember(dst => dst.BacklogStatus, opts => opts.UseValue<Domain.FollowUpActivityBacklogStatus>(Domain.FollowUpActivityBacklogStatus.Work));
AutoMapper.Mapper.CreateMap()
.FormMember(dst=>dst.CreationDate,opts=>opts.Ignore())//opts.MapFrom(s=>s.Timestamp.HasValue?s.Timestamp.Value:DateTime.MinValue))
.FormMember(dst=>dst.StartDate,opts=>opts.Ignore())///opts.MapFrom(s=>s.StartTimestamp.HasValue?s.StartTimestamp.Value:DateTime.MinValue))
.ForMember(dst=>dst.duetate,opts=>opts.Ignore())///opts.MapFrom(s=>s.duetimstamp.HasValue?s.duetimstamp.Value:DateTime.MinValue))
.FormMember(dst=>dst.ClosingDate,opts=>opts.Ignore())//opts.MapFrom(s=>s.ClosingTimestamp.HasValue?s.ClosingTimestamp.Value:DateTime.MinValue));
.FormMember(dst=>dst.Status,opts=>opts.UseValue(Domain.FollowUpActivityStatus.Open))
.FormMember(dst=>dst.BacklogStatus,opts=>opts.UseValue(Domain.FollowUpActivityBacklogStatus.Work));

我创建了一个测试来测试此映射:

namespace Tests
{
[TestFixture]
public class Mapping
{

    [SetUp]
    public void initialize()
    {
        Core.Mappings.AutoMapperConfiguration.Configure();
    }

    [Test]
    public void configutation()
    {
        AutoMapper.Mapper.AssertConfigurationIsValid<Core.Mappings.Profiles.FollowUpActivityProfile>();
    }

    [Test]
    public void followUpActivityDTOToDOMAIN()
    {
        LEST.Model.FollowUpActivityDTO dto = new LEST.Model.FollowUpActivityDTO()
        {
            Id = new Guid().ToString(),
            Timestamp = DateTime.UtcNow,
            StartTimestamp = DateTime.UtcNow,
            DueTimestamp = DateTime.UtcNow,
            ClosingTimestamp = DateTime.UtcNow,
            Matter = "Matter",
            Comment = "Comment",
            Status = "open",
            BacklogStatus = "work",
            Metainfos = new System.Collections.Generic.List<LEST.Model.MetaInfoValueDTO>()
        };

        Domain.FollowUpActivity domain = new Domain.FollowUpActivity();
        AutoMapper.Mapper.Map<LEST.Model.FollowUpActivityDTO, Domain.FollowUpActivity>(dto, domain);

        domain.Should().NotBeNull();
        domain.Id.Should().Be(dto.Id);
    }
}
}
命名空间测试
{
[测试夹具]
公共类映射
{
[设置]
公共无效初始化()
{
Core.Mappings.AutoMapperConfiguration.Configure();
}
[测试]
公共无效配置()
{
AutoMapper.Mapper.AssertConfiguration验证();
}
[测试]
public void followupactivitydtotomain()
{
test.Model.FollowUpActivityDTO=新的test.Model.FollowUpActivityDTO()
{
Id=新Guid().ToString(),
时间戳=DateTime.UtcNow,
StartTimestamp=DateTime.UtcNow,
DueTimestamp=DateTime.UtcNow,
ClosingTimestamp=DateTime.UtcNow,
Matter=“Matter”,
Comment=“Comment”,
Status=“打开”,
BacklogStatus=“工作”,
Metainfos=new System.Collections.Generic.List()
};
Domain.FollowUpActivity Domain=新域.FollowUpActivity();
AutoMapper.Mapper.Map(dto,域);
domain.Should().NotBeNull();
domain.Id.Should().Be(dto.Id);
}
}
}
看看:

Domain.FollowUpActivity domain = new Domain.FollowUpActivity();
AutoMapper.Mapper.Map<LEST.Model.FollowUpActivityDTO, Domain.FollowUpActivity>(dto, domain);
Domain.FollowUpActivity Domain=新的Domain.FollowUpActivity();
AutoMapper.Mapper.Map(dto,域);
现在我工作。但是,如果我按以下方式编写代码,它将崩溃:

Domain.FollowUpActivity domain = AutoMapper.Mapper.Map<LEST.Model.FollowUpActivityDTO, Domain.FollowUpActivity>(dto);
Domain.FollowUpActivity Domain=AutoMapper.Mapper.Map(dto);
我发现问题出在目标类的构造函数上,然后:

namespace Domain
{
public enum FollowUpActivityStatus
{
    Open,
    Closed,
    Delegated
}

public enum FollowUpActivityBacklogStatus
{
    Work,
    Sprint        
}

public class FollowUpActivity
{
    private String id;              // Generated on server
    private DateTime? creationDate;
    private DateTime? startDate;
    private DateTime? dueDate;
    private DateTime? closingDate;
    private String matter;
    private String comment;
    private FollowUpActivityStatus status;
    private FollowUpActivityBacklogStatus backlogStatus;

    private List<MetaInfoValue> metainfos;
    private List<MetaResource> resources;

    #region Properties

    public String Id
    {
        get { return id; }
        set { id = value; }
    }

    public DateTime? CreationDate
    {
        get { return creationDate; }
        set { creationDate = value; }
    }

    public DateTime? StartDate
    {
        get { return startDate; }
        set { startDate = value; }
    }

    public DateTime? DueDate
    {
        get { return dueDate; }
        set { dueDate = value; }
    }

    public DateTime? ClosingDate
    {
        get { return closingDate; }
        set { closingDate = value; }
    }

    public FollowUpActivityStatus Status
    {
        get { return status; }
        set { status = value; }
    }

    public FollowUpActivityBacklogStatus BacklogStatus
    {
        get { return backlogStatus; }
        set { backlogStatus = value; }
    }

    public String Matter
    {
        get { return matter; }
        set { matter = value; }
    }

    public String Comment
    {
        get { return comment; }
        set { comment = value; }
    }

    public List<MetaInfoValue> Metainfos
    {
      get { return metainfos; }
      set { metainfos = value; }
    }

    public List<MetaResource> Resources
    {
        get { return resources; }
        set { resources = value; }
    }

    #endregion

    #region Constructors

    public FollowUpActivity()
        : this(null, null)
    {

    }

    public FollowUpActivity(String matter, String comment = null, params Domain.MetaInfoValue[] metainfos)
        : this(DateTime.Now, matter, comment, metainfos)
    {

    }

    public FollowUpActivity(DateTime creationDate, String matter, String comment = null, params Domain.MetaInfoValue[] metainfos)
        : this(creationDate, matter, new List<MetaResource>(), comment, metainfos)
    {

    }

    public FollowUpActivity(DateTime creationDate, String matter, List<MetaResource> resources, String comment = null, params Domain.MetaInfoValue[] metainfos)
        : this(creationDate, matter, FollowUpActivityBacklogStatus.Work, new List<MetaResource>(), comment, metainfos)
    {

    }

    public FollowUpActivity(DateTime creationDate, String matter, FollowUpActivityBacklogStatus backlogStatus, List<MetaResource> resources, String comment = null, params Domain.MetaInfoValue[] metainfos)
        : this(creationDate, null, null, null, matter, FollowUpActivityStatus.Open, backlogStatus, new List<MetaResource>(), comment, metainfos)
    {

    }

    public FollowUpActivity(DateTime? creationDate, DateTime? startDate, DateTime? dueDate, DateTime? closingDate, String matter, FollowUpActivityStatus status, FollowUpActivityBacklogStatus backlogStatus, List<MetaResource> resources, String comment = null, params Domain.MetaInfoValue[] metainfos)
    {
        this.id = String.Empty;
        this.creationDate = creationDate;
        this.startDate = startDate;
        this.dueDate = dueDate;
        this.closingDate = closingDate;
        this.matter = matter;
        this.comment = comment;
        this.status = status;
        this.backlogStatus = backlogStatus;

        this.metainfos = new List<MetaInfoValue>(metainfos);
        this.resources = resources;
    }

    #endregion

}
}
命名空间域
{
公共枚举后续活动状态
{
打开
关闭
委派
}
公共枚举后续活动BackLogStatus
{
工作
冲刺
}
公开课后续活动
{
私有字符串id;//在服务器上生成
私有日期时间?creationDate;
私人日期时间?起始日期;
私人日期时间?决斗日期;
私有日期时间?关闭日期;
私事;
私有字符串注释;
私人后续活动状态;
私人跟进活动backlogStatus backlogStatus;
私有列表元信息;
私人名单资源;
#区域属性
公共字符串Id
{
获取{return id;}
设置{id=value;}
}
公共日期时间?CreationDate
{
获取{return creationDate;}
设置{creationDate=value;}
}
公共日期时间?起始日期
{
获取{return startDate;}
设置{startDate=value;}
}
公开日期时间
{
获取{return dueDate;}
设置{dueDate=value;}
}
公共日期时间?结束日期
{
获取{return closingDate;}
设置{closingDate=value;}
}
公共后续活动状态
{
获取{返回状态;}
设置{status=value;}
}
公共后续活动BacklogStatus BacklogStatus
{
获取{return backlogStatus;}
设置{backlogStatus=value;}
}
公共事务
{
获取{返回物质;}
设置{matter=value;}
}
公共字符串注释
{
获取{返回注释;}
设置{comment=value;}
}
公共列表元信息
{
获取{return metainfos;}
设置{metainfos=value;}
}
公共列表资源
{
获取{返回资源;}
设置{resources=value;}
}
#端区
#区域构造函数
公共后续活动()
:此(空,空)
{
}
public FollowUpActivity(字符串内容,字符串注释=null,参数Domain.MetaInfoValue[]metainfos)
:this(DateTime.Now、matter、comment、metainfos)
{
}
公共FollowUpActivity(DateTime creationDate,字符串内容,字符串注释=null,参数Domain.MetaInfoValue[]metainfos)
:此(创建日期、事项、新列表()、注释、元信息)
{
}
公共后续活动(DateTime creationDate、字符串内容、列表资源、字符串注释=null、参数Domain.MetaInfoValue[]metainfos)
:这(creationDate、matter、FollowUpActivityBacklogStatus.Work、new List()、comment、metainfos)
{
}
公共FollowUpActivity(DateTime creationDate,字符串物质,FollowUpActivityBacklogStatus backlogStatus,列表资源,字符串注释=null,参数D
Domain.FollowUpActivity domain = new Domain.FollowUpActivity();
AutoMapper.Mapper.Map<LEST.Model.FollowUpActivityDTO, Domain.FollowUpActivity>(dto, domain);
Domain.FollowUpActivity domain = AutoMapper.Mapper.Map<LEST.Model.FollowUpActivityDTO, Domain.FollowUpActivity>(dto);
namespace Domain
{
public enum FollowUpActivityStatus
{
    Open,
    Closed,
    Delegated
}

public enum FollowUpActivityBacklogStatus
{
    Work,
    Sprint        
}

public class FollowUpActivity
{
    private String id;              // Generated on server
    private DateTime? creationDate;
    private DateTime? startDate;
    private DateTime? dueDate;
    private DateTime? closingDate;
    private String matter;
    private String comment;
    private FollowUpActivityStatus status;
    private FollowUpActivityBacklogStatus backlogStatus;

    private List<MetaInfoValue> metainfos;
    private List<MetaResource> resources;

    #region Properties

    public String Id
    {
        get { return id; }
        set { id = value; }
    }

    public DateTime? CreationDate
    {
        get { return creationDate; }
        set { creationDate = value; }
    }

    public DateTime? StartDate
    {
        get { return startDate; }
        set { startDate = value; }
    }

    public DateTime? DueDate
    {
        get { return dueDate; }
        set { dueDate = value; }
    }

    public DateTime? ClosingDate
    {
        get { return closingDate; }
        set { closingDate = value; }
    }

    public FollowUpActivityStatus Status
    {
        get { return status; }
        set { status = value; }
    }

    public FollowUpActivityBacklogStatus BacklogStatus
    {
        get { return backlogStatus; }
        set { backlogStatus = value; }
    }

    public String Matter
    {
        get { return matter; }
        set { matter = value; }
    }

    public String Comment
    {
        get { return comment; }
        set { comment = value; }
    }

    public List<MetaInfoValue> Metainfos
    {
      get { return metainfos; }
      set { metainfos = value; }
    }

    public List<MetaResource> Resources
    {
        get { return resources; }
        set { resources = value; }
    }

    #endregion

    #region Constructors

    public FollowUpActivity()
        : this(null, null)
    {

    }

    public FollowUpActivity(String matter, String comment = null, params Domain.MetaInfoValue[] metainfos)
        : this(DateTime.Now, matter, comment, metainfos)
    {

    }

    public FollowUpActivity(DateTime creationDate, String matter, String comment = null, params Domain.MetaInfoValue[] metainfos)
        : this(creationDate, matter, new List<MetaResource>(), comment, metainfos)
    {

    }

    public FollowUpActivity(DateTime creationDate, String matter, List<MetaResource> resources, String comment = null, params Domain.MetaInfoValue[] metainfos)
        : this(creationDate, matter, FollowUpActivityBacklogStatus.Work, new List<MetaResource>(), comment, metainfos)
    {

    }

    public FollowUpActivity(DateTime creationDate, String matter, FollowUpActivityBacklogStatus backlogStatus, List<MetaResource> resources, String comment = null, params Domain.MetaInfoValue[] metainfos)
        : this(creationDate, null, null, null, matter, FollowUpActivityStatus.Open, backlogStatus, new List<MetaResource>(), comment, metainfos)
    {

    }

    public FollowUpActivity(DateTime? creationDate, DateTime? startDate, DateTime? dueDate, DateTime? closingDate, String matter, FollowUpActivityStatus status, FollowUpActivityBacklogStatus backlogStatus, List<MetaResource> resources, String comment = null, params Domain.MetaInfoValue[] metainfos)
    {
        this.id = String.Empty;
        this.creationDate = creationDate;
        this.startDate = startDate;
        this.dueDate = dueDate;
        this.closingDate = closingDate;
        this.matter = matter;
        this.comment = comment;
        this.status = status;
        this.backlogStatus = backlogStatus;

        this.metainfos = new List<MetaInfoValue>(metainfos);
        this.resources = resources;
    }

    #endregion

}
}