You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AutoMapper转换中使用string.Split()处理多行日期字符串

多行日期字符串转换失败的解决方案

你的问题出在默认的DateTimeConverter只能处理单个可解析为DateTime的字符串,当输入是换行分隔的多行日期时,整个字符串无法被识别为单个DateTime对象,因此抛出解析错误。要实现每行日期单独转换的需求,需要自定义类型转换器来处理多行场景。

实现步骤

  1. 自定义多行日期转换器
    编写一个继承ITypeConverter<string, string>的转换器,将输入字符串按行分割,逐个解析并转换每个日期,最后拼接回原格式:

    using AutoMapper;
    using System.Globalization;
    using System.Collections.Generic;
    
    public class MultiLineDateTimeConverter : ITypeConverter<string, string>
    {
        // 输入日期格式
        private const string InputDateFormat = "yyyy-MM-ddTHH:mm:ss";
        // 输出日期格式
        private const string OutputDateFormat = "yyyy-MM-ddTHH:mm:ssz";
    
        public string Convert(string source, string destination, ResolutionContext context)
        {
            if (string.IsNullOrWhiteSpace(source))
                return source;
    
            // 按换行符分割,保留所有行(包括空行)
            var lines = source.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None);
            var convertedLines = new List<string>();
    
            foreach (var line in lines)
            {
                // 尝试解析当前行的日期
                if (DateTime.TryParseExact(line.Trim(), InputDateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out var parsedDate))
                {
                    // 转换为目标格式
                    convertedLines.Add(parsedDate.ToString(OutputDateFormat, CultureInfo.InvariantCulture));
                }
                else
                {
                    // 解析失败时保留原行内容,避免报错
                    convertedLines.Add(line);
                }
            }
    
            // 用原换行符拼接结果,保持格式一致
            return string.Join("\r\n", convertedLines);
        }
    }
    
  2. 替换原转换器配置
    在B类的映射配置中,使用自定义转换器替代原来的DateTimeConverter:

    class B : A
    {
        public B()
        {
            Map(m => m.dates)
                .TypeConverter<MultiLineDateTimeConverter>();
        }
    }
    

说明

  • 自定义转换器会逐行处理输入字符串,确保每个有效日期都被转换为目标格式,无效行(或空行)会原样保留,避免解析报错。
  • 如果你的换行符格式不是\r\n(比如仅\n),可以调整Split方法的参数适配实际场景。

内容的提问来源于stack exchange,提问作者Imran Ahmad Shahid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:10:17