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

如何使用AutoMapper将自定义类映射为不同类型的二维数组

使用AutoMapper将MeasurementChartXY列表映射为二维数组

步骤1:配置AutoMapper映射

创建AutoMapper的映射规则,将MeasurementChartXY对象转换为包含两个元素的数组:第一个元素是DateTime转UTC后对应的1970纪元毫秒数,第二个元素是Y属性的可空数值。

var configuration = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<MeasurementChartXY, object[]>()
        .ConvertUsing(source => new object[]
        {
            // 计算UTC时间下自1970-01-01以来的毫秒数,匹配JS getTime()逻辑
            (long)(source.X.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds,
            source.Y // 直接映射可空double值
        });
});

// 可选:验证配置是否存在错误
configuration.AssertConfigurationIsValid();

步骤2:执行映射

实例化Mapper后,即可完成列表到二维数组的转换:

var mapper = configuration.CreateMapper();

// 示例数据源
List<MeasurementChartXY> measurements = new List<MeasurementChartXY>
{
    new MeasurementChartXY { X = DateTime.Parse("2023-07-09 10:30:54.487"), Y = 3.45 },
    new MeasurementChartXY { X = DateTime.Parse("2023-07-09 10:30:54.587"), Y = 3.46 },
    new MeasurementChartXY { X = DateTime.Parse("2023-07-09 10:30:54.687"), Y = 3.45 }
};

// 转换为目标二维数组
object[][] result = mapper.Map<object[][]>(measurements);

关键细节说明

  • 时区一致性:JS的getTime()基于UTC时间,所以C#中必须将DateTime转为UTC后计算差值,避免时区偏移导致的数值错误。
  • 可空值处理:如果Y为null,映射后的数组对应位置会保留null;若需要默认值(比如0),可修改为source.Y ?? 0。
  • 数组类型适配:如果Y始终非空,也可以使用double[][]作为目标类型,只需将毫秒数强制转为double:(double)(...TotalMilliseconds)。

内容的提问来源于stack exchange,提问作者Evert Dausy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:03:07