Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Automapper 8.0+;所有日期时间到utc_C#_Automapper - Fatal编程技术网

C# Automapper 8.0+;所有日期时间到utc

C# Automapper 8.0+;所有日期时间到utc,c#,automapper,C#,Automapper,我想将所有属性从datetime未指定的种类映射到UTC种类,只需为Automapper 8.0的所有属性的映射添加种类到datetime,我发现了一些可能有效的解决方案,但它们适用于使用ResolveUsing而不是MapFrom()的旧版本的Automapper。 如何做到这一点 cfg.ForAllPropertyMaps(map => map.TypeMap.SourceType is IDbType && (map.SourceType == typeof(Dat

我想将所有属性从datetime未指定的种类映射到UTC种类,只需为Automapper 8.0的所有属性的映射添加种类到datetime,我发现了一些可能有效的解决方案,但它们适用于使用ResolveUsing而不是MapFrom()的旧版本的Automapper。 如何做到这一点

cfg.ForAllPropertyMaps(map => map.TypeMap.SourceType is IDbType && (map.SourceType == typeof(DateTime?) || map.SourceType == typeof(DateTime)), (map, expression) => { expression.ResolveUsing(o => { return #DO_WHATEVER_YOU_NEED# }); }); 

我只想从服务器->客户端映射所有实体和日期时间,以添加Utc种类,以上代码来自github.com/AutoMapper/AutoMapper/issues/1650

您可以使用
ConvertUsing()
作为
CreateMap()
类型的条目。代码可能如下所示:

cfg.CreateMap<DateTime, DateTime>().ConvertUsing((s, d) => {
    return DateTime.SpecifyKind(s, DateTimeKind.Utc);
});

只需使用
MapFrom()
,请参阅是否可以对所有属性而不是单个DTO执行此操作?@DankX1最有可能,因为存在类似
ForAllMaps()
之类的辅助方法,但这取决于您使用的实际配置。或者您没有使用
CreateMap()
?@DankX1那么问题出在哪里?您定义了
DateTime
->
DateTime
的映射,如图所示,
DateTime
的“种类”发生了变化。哦,太好了,它对空值和日期时间都有效吗?我需要另一个映射DateTime?,DateTime?@DankX1它也适用于
DateTime?
。如果没有,您可以自己添加一个
CreateMap()
class TestDTO {
    public DateTime SomeProp {get; set;}
}

class Program
{
    static void Main(string[] args)
    {
        var config = new MapperConfiguration(cfg => {
            cfg.CreateMap<TestDTO, TestDTO>();
            cfg.CreateMap<DateTime, DateTime>().ConvertUsing((s, d) => {
                return DateTime.SpecifyKind(s, DateTimeKind.Utc);
            });
        });
        TestDTO dto = new TestDTO {
            SomeProp = DateTime.Today
        };
        var mapper = new Mapper(config);
        DateTime now = dto.SomeProp;
        Console.WriteLine($"{now} - {now.Kind}");
        TestDTO changed = mapper.Map<TestDTO>(dto);
        DateTime nowWithKind = changed.SomeProp;
        Console.WriteLine($"{nowWithKind} - {nowWithKind.Kind}");            
    }  
}