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

使用AutoMapper将字符串映射为List<T>是否可行?

可以实现

完全可以把Source类的JsonItems字符串属性映射到Dest类的只读Items列表属性,下面是两种常用的实现方式:

手动映射

这种方式不需要依赖第三方工具,直接借助JSON序列化库完成转换:

第一步:给Dest类添加构造函数

由于Dest的Items是只读属性(只有get访问器),必须通过类的构造函数来初始化这个列表:

class Dest {
    public List<Item> Items { get; }

    // 添加接收列表的构造函数
    public Dest(List<Item> items) {
        // 避免传入null,初始化空列表
        Items = items ?? new List<Item>();
    }
}

第二步:完成映射操作

使用System.Text.Json(.NET Core/5+内置)或者Newtonsoft.Json来反序列化JSON字符串,再实例化Dest:

// 使用System.Text.Json的示例
var source = new Source { JsonItems = "[{\"Id\":1,\"Name\":\"示例\"}]" };
var items = JsonSerializer.Deserialize<List<Item>>(source.JsonItems);
var dest = new Dest(items);

// 使用Newtonsoft.Json的示例(需先安装Newtonsoft.Json包)
// var items = JsonConvert.DeserializeObject<List<Item>>(source.JsonItems);
// var dest = new Dest(items);

使用AutoMapper实现

如果项目中已经在用AutoMapper,可以通过自定义映射规则来完成:

第一步:配置映射规则

在AutoMapper的配置中,指定从Source.JsonItems反序列化为Dest.Items:

var mapperConfig = new MapperConfiguration(cfg => {
    cfg.CreateMap<Source, Dest>()
       .ForMember(dest => dest.Items, opt => 
           opt.MapFrom(src => JsonSerializer.Deserialize<List<Item>>(src.JsonItems)));
});

// 创建映射器实例
var mapper = mapperConfig.CreateMapper();

第二步:执行映射

直接调用Map方法完成转换:

var source = new Source { JsonItems = "[{\"Id\":1,\"Name\":\"示例\"}]" };
var dest = mapper.Map<Dest>(source);

注意:如果Dest没有提供接收列表的构造函数,AutoMapper会通过反射来设置只读属性,但这种方式不够优雅,更推荐给Dest添加构造函数来保证封装性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:20:24