我正在使用Automapper将值从一个实例复制到另一个实例,我发现如果该类具有数组属性,并且源实例的属性设置为null,则Automapper将目标属性设置为零长度数组的null如我所料.
有没有办法配置Automapper将目标设置null为源何时null?
如果我的解释不清楚,以下代码说明了我想要描述的内容:
public class Test
{
public byte[] ByteArray { get; set; }
public int? NullableInt { get; set; }
public int Int { get; set; }
}
class Program
{
static void Main(string[] args)
{
Mapper.CreateMap<Test, Test>();
var test1 = new Test { Int = 123, NullableInt = null, ByteArray = null };
var test2 = Mapper.Map<Test>(test1);
// test1: Int == 123, NullableInt == null, ByteArray == null
// test2: Int == 123, NullableInt == null, ByteArray == byte[0] <-- expect this to be null
}
}
Run Code Online (Sandbox Code Playgroud)
Jef*_*ata 43
我发现这已经报告为一个问题,并添加了一个新的配置选项(请参阅此提交).此时,该选项不在NuGet提供的版本中,但我能够找到一种方法来处理这个问题,直到下一个版本发布:
Mapper.CreateMap<Test, Test>()
.ForMember(t => t.ByteArray, opt => opt.ResolveUsing(t => t.ByteArray == null ? null : t.ByteArray));
Run Code Online (Sandbox Code Playgroud)
更新:
从版本2.1.265.0开始,您可以使用以下AllowNullCollections属性:
Mapper.Configuration.AllowNullCollections = true;
Mapper.CreateMap<Test, Test>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4967 次 |
| 最近记录: |