gpt4 book ai didi

c# - Automapper 更新字典值

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:16 26 4
gpt4 key购买 nike

我有一个包含字典的实体,我想要实现的是自动映射器不仅要替换字典,还要更新它的值。

class ExampleClass
{
public string Name { get; set; }
public Dictionary<int, string[]> Dictionary { get; set; }
}

Mapper.CreateMap<ExampleClass, ExampleClass>().ForAllMembers(opt => opt.Condition(srs => !srs.IsSourceValueNull));

var originalClass = new ExampleClass();
originalClass.Name = "Original Class";
originalClass.Dictionary = new Dictionary<int, string[]>
{
{0, new []{"V1", "V2", "V3"}},
{1, new []{"V1", "V2", "V3"}},
{2, new []{"V1", "V2", "V3"}}
};

var newelyCreatedClass = new ExampleClass();
newelyCreatedClass.Dictionary = new Dictionary<int, string[]>
{
{1, new []{"E1", "E2", "E9"}},
};

Mapper.Map(newelyCreatedClass, originalClass);

在上面的代码中,automapper 奇怪地没有使用 key == 1 更新 Dictionary 元素,而是将整个原始元素替换为在 newelyCreatedClass 中创建的元素。

最佳答案

AutoMapper 只是自动比较并设置值(如果存在),这就是属性被覆盖的原因。但是你可以做的是使用一个名为 Custom Value Resolvers 的自动映射器功能。 .

然后您可以编写一个解析器来检查字典及其值。

public class CustomResolver : IValueResolver<ExampleClass, ExampleClass, Dictionary<int, string[]>>
{
public Dictionary<int, string[]> Resolve(ExampleClass source, ExampleClass destination, Dictionary<int, string[]> member, ResolutionContext context)
{
// logic to iterate through the dictionarys and resolve into dictionary containing values that you want.
}
}

关于c# - Automapper 更新字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21767558/

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