本文介绍了如果对象成员没有值,如何为对象分配NULL-autoapper c#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用c#中的自动映射程序。

class A
{
   public int Value { get; set; }
   public string Code { get; set; }
   public B? Details { get; set; }
}

 class B
 {
   public int Id { get; set;}
   public string Name { get; set; }
 }

 class C
 {
   public int Value { get; set; }
   public string Code { get; set; }
   public int? DetailId { get; set; }
   public string? DetailName { get; set; }
 }

和我在自动映射程序中使用的如下所示:

CreateMap<C, A>()
.ForPath(o => o.Details.Id, b => b.MapFrom(z => z.DetailId))
.ForPath(o => o.Details.Name, b => b.MapFrom(z => z.DetailName))
.ReverseMap();

当我使用LIKE上面的映射时,我得到LIKE输出为

  "details ": {
        "id": 0,
        "name": ""
   }
如果Details的成员没有值,我需要将Details值作为NULL而不是对象类型获取。即)DetailIdDetailName没有值。如何获得此功能?

  "details" : null

推荐答案

您可以使用条件映射

    var config = new MapperConfiguration(cfg =>
      {
         cfg.CreateMap<C, B>()
            .ForMember(o => o.Id, b => b.MapFrom(z => z.DetailId))
            .ForMember(o => o.Name, b => b.MapFrom(z => z.DetailName));

          cfg.CreateMap<C, A>()
             .ForMember(o => o.Details, b => b.MapFrom((c, a, obj, context) => !string.IsNullOrEmpty(c.DetailName) ? context.Mapper.Map<B>(c) : null))
             .ReverseMap();
      });

这篇关于如果对象成员没有值,如何为对象分配NULL-autoapper c#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-17 02:29
查看更多