lun*_*c84 1 .net c# mapping automapper
我在尝试忽略目标属性时遇到问题
源码类:
public class ClassDto
{
public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
目的地舱位:
public class ClassModel
{
public int Id { get; set; }
public IList<string> ListString { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
例子:
public class Program
{
static void Main(string[] args)
{
var dto = new ClassDto { Id = 1 };
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<ClassDto, ClassModel>().
ForMember(i => i.ListString, opt => opt.DoNotUseDestinationValue());
});
config.AssertConfigurationIsValid();
var mapper = config.CreateMapper();
var model = mapper.Map<ClassDto, ClassModel>(dto);
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是 config.AssertConfigurationIsValid(); 出现异常:
$exception {"\n找到未映射的成员。检查下面的类型和成员。\n添加自定义映射表达式、忽略、添加自定义解析器或修改源/目标类型\n如果没有匹配的构造函数,请添加无参数构造函数、添加可选参数或映射所有构造函数参数\n====================================== ===============\r\nClassDto -> ClassModel(目标成员列表)\r\nAutoMapperFoo.ClassDto -> AutoMapperFoo.ClassModel(目标成员列表)\r\n\r\ n未映射的属性:\r\nListString\r\n"} AutoMapper.AutoMapperConfigurationException
我无法理解为什么,我明确地通过 DoNotUseDestinationValue 忽略 ListString
提前致谢
默认情况下,当源类型和目标类型属性名称相同时,AutoMapper 会尝试将所有属性从源类型映射到目标类型。如果您希望某些属性不与目标类型属性映射,则需要使用 C# 中的 AutoMapper Ignore Property。了解更多AutoMapper 忽略 C# 中的属性
Automapper 提供了Ignore属性,它告诉映射器不要从源类中获取属性的值。忽略不仅忽略属性的映射,还忽略所有内部属性的映射。这意味着如果属性不是基本类型,而是另一个类,那么如果您使用“忽略”,则不会映射此类属性。因此,ABC 将是 A.Null。
所以尝试使用这个:
.ForMember(x => x.ListString, opt => opt.Ignore())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1346 次 |
| 最近记录: |