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

使用AutoMapper的IValueConverter时ReverseMap反向映射问题求助

AutoMapper双向映射自定义值转换器实现

问题分析

正向从ParentA映射到ParentB可正常运行,但反向ParentB→ParentA时失败,原因是自定义值转换器IntConverter仅实现了string→int的转换逻辑,未完成反向int→string的转换,且未实现对应的IValueConverter<int, string>接口。

解决方案

1. 修改值转换器,实现双向转换接口

让IntConverter同时实现IValueConverter<string, int>和IValueConverter<int, string>两个接口,补全反向转换的逻辑:

public class IntConverter : IValueConverter<string, int>, IValueConverter<int, string>
{
    // 正向转换:ParentA.isActive(string) → ParentB.Value(int)
    public int Convert(string sourceMember, ResolutionContext context)
    {
        return sourceMember switch
        {
            "Y" => 100,
            "N" => 200,
            "P" => 500,
            _ => 1000
        };
    }

    // 反向转换:ParentB.Value(int) → ParentA.isActive(string)
    public string Convert(int sourceMember, ResolutionContext context)
    {
        return sourceMember switch
        {
            100 => "Y",
            200 => "N",
            500 => "P",
            _ => "Y" // 可根据业务需求调整默认值,比如改为"Unknown"
        };
    }
}

2. 配置反向映射的属性特性

AutoMapper的ReverseMap=true不会自动反转属性上的SourceMember和ValueConverter配置,需在ParentA的isActive属性上添加对应的映射特性,确保反向映射时能匹配正确的源字段和转换器:

public class ParentA
{
    public int Id { get; set; }
    public string Name { get; set; }

    [ValueConverter(typeof(IntConverter))]
    [SourceMember("Value")]
    public string isActive { get; set; }
}

[AutoMap(typeof(ParentA), ReverseMap = true)]
public class ParentB
{
    public int Id { get; set; }
    public string Name { get; set; }

    [ValueConverter(typeof(IntConverter))]
    [SourceMember("isActive")]
    public int Value { get; set; } 
}

3. 测试验证

修改后执行测试代码即可完成双向映射:

ParentA ssssssss = new ParentA { Id = 1, isActive = "Y", Name = "test" };
var response = automapper.Map<ParentB>(ssssssss);
response.Value = 500;
var yyyy = automapper.Map<ParentA>(response);
// yyyy.isActive 会被正确映射为 "P"

内容的提问来源于stack exchange,提问作者Jishnu Chandran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:45:02