gpt4 book ai didi

automapper - 使用 AutoMapper 映射字典

转载 作者:行者123 更新时间:2023-12-03 08:00:42 28 4
gpt4 key购买 nike

鉴于这些类,我如何映射它们的字典?

public class TestClass
{
public string Name { get; set; }
}

public class TestClassDto
{
public string Name { get; set; }
}


Mapper.CreateMap<TestClass, TestClassDto>();
Mapper.CreateMap<Dictionary<string, TestClass>,
Dictionary<string, TestClassDto>>();

var testDict = new Dictionary<string, TestClass>();
var testValue = new TestClass() {Name = "value1"};
testDict.Add("key1", testValue);

var mappedValue = Mapper.Map<TestClass, TestClassDto>(testValue);

var mappedDict = Mapper.Map<Dictionary<string, TestClass>,
Dictionary<string, TestClassDto>>(testDict);

映射其中之一,在这种情况下为 mappedValue,可以正常工作。

映射它们的字典最终在目标对象中没有条目。

我在做什么?

最佳答案

您遇到的问题是因为 AutoMapper 正在努力映射 内容 的字典。你必须想一想它是什么商店——在这种情况下是 键值对 .

如果您尝试为 KeyValuePair 组合创建映射器,您将很快发现您不能直接作为 键属性没有 setter .

AutoMapper 通过允许您使用构造函数映射来解决这个问题。

/* Create the map for the base object - be explicit for good readability */
Mapper.CreateMap<TestClass, TestClassDto>()
.ForMember( x => x.Name, o => o.MapFrom( y => y.Name ) );

/* Create the map using construct using rather than ForMember */
Mapper.CreateMap<KeyValuePair<string, TestClass>, KeyValuePair<string, TestClassDto>>()
.ConstructUsing( x => new KeyValuePair<string, TestClassDto>( x.Key,
x.Value.MapTo<TestClassDto>() ) );

var testDict = new Dictionary<string, TestClass>();
var testValue = new TestClass()
{
Name = "value1"
};
testDict.Add( "key1", testValue );

/* Mapped Dict will have your new KeyValuePair in there */
var mappedDict = Mapper.Map<Dictionary<string, TestClass>,
Dictionary<string, TestClassDto>>( testDict );

关于automapper - 使用 AutoMapper 映射字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5995167/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com