Automapper 字符串到 Guid 不起作用

206*_*mph 1 c# guid automapper .net-core

我想创建一个通用类型转换器,根据我转换的方向(DTO > VM 或 VM > DTO)将 Guid 转换为字符串,将字符串转换为 Guid。此外,某些属性具有可为空的 Guid,所以我想我也可以处理它。我试过以下不走运:

CreateMap<string, Guid?>().ConvertUsing(value => !string.IsNullOrEmpty(value) ? Guid.Parse(value) : (Guid?)null);
CreateMap<string, Guid>().ConvertUsing(guid => Guid.Parse(guid));
Run Code Online (Sandbox Code Playgroud)

CreateMap<Guid?, string>().ConvertUsing(guid => guid?.ToString("N"));
CreateMap<Guid, string>().ConvertUsing(guid => guid.ToString("N"));
Run Code Online (Sandbox Code Playgroud)

关于如何使其工作的任何建议?

fha*_*eau 5

这适用于我的电脑:

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<string, Guid>().ConvertUsing(s => Guid.Parse(s));
    cfg.CreateMap<string, Guid?>().ConvertUsing(s => String.IsNullOrWhiteSpace(s) ? (Guid?)null : Guid.Parse(s));
    cfg.CreateMap<Guid?, string>().ConvertUsing(g => g?.ToString("N"));
    cfg.CreateMap<Guid, string>().ConvertUsing(g => g.ToString("N"));
});

var guid = Guid.NewGuid();
var guidStr = Guid.NewGuid().ToString();

var guid1 = Mapper.Map<Guid>(guidStr);     // The guid is parsed successfully
var guid2 = Mapper.Map<Guid?>(null);       // Gets null as expected
var str1 = Mapper.Map<string>(guid);       // The guid is serialized successfully
var str2 = Mapper.Map<string>(null);       // Gets null as expected
Run Code Online (Sandbox Code Playgroud)

您是否使用该Initialize方法像这样配置您的 Mapper ?

它也可以使用Mapper.Instance.Map方法而不是Mapper.Map直接使用。


Luc*_*anu 5

If the default string format is good enough, this works by default in both directions, no type converters needed.