gpt4 book ai didi

c# - 没有 setter 的 Automapper 嵌套集合

转载 作者:行者123 更新时间:2023-11-30 15:17:15 25 4
gpt4 key购买 nike

我在 LinqPad(C# 程序)上运行了这段代码片段,其中已经包含了 Automapper Nuget 包 6.1.1:

void Main()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Top, TopDto>().ReverseMap();
});

Mapper.AssertConfigurationIsValid();

var source = new TopDto
{
Id = 1,
Name = "Charlie",
Nicks = new List<string> { "Fernandez", "Others" }
};


var destination = Mapper.Map<Top>(source);

destination.Dump();

}

// Define other methods and classes here
public class Top
{
public Top()
{
Nicks = new List<string>();
}

public int Id { get; set; }
public string Name { get; set; }
public ICollection<string> Nicks { get; }
}

public class TopDto
{
public TopDto()
{
Nicks = new List<string>();
}

public int Id { get; set; }
public string Name { get; set; }
public ICollection<string> Nicks { get; set; }
}

如您所见,我们在设置嵌套 Collection 时遇到了问题(根本没有 Setter)。从理论上讲,这应该可以正常运行,但它不会向集合中添加任何元素。

如果我们更改集合属性并添加一个公共(public) setter ,那么一切都很好。

如何在不添加公共(public) setter 或根本不添加 setter 的情况下获得嵌套集合?

最佳答案

感谢@LucianBargaoanu(在评论中),现在以这种方式解决了这个问题:

void Main()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Top, TopDto>().ReverseMap()
.ForMember(d => d.Nicks, o=>
{
o.MapFrom(s => s.Nicks);
o.UseDestinationValue();
});
});

Mapper.AssertConfigurationIsValid();

var source = new TopDto(new List<string> { "Fernandez", "Others" })
{
Id = 1,
Name = "Charlie"
};


var destination = Mapper.Map<Top>(source);

destination.Dump();

}

// Define other methods and classes here
public class Top
{
public Top()
{
Nicks = new List<string>();
}

public int Id { get; set; }
public string Name { get; set; }
public ICollection<string> Nicks { get; }
}

public class TopDto
{
public TopDto(List<string> nicks)
{
Nicks = nicks;
}

public int Id { get; set; }
public string Name { get; set; }
public ICollection<string> Nicks { get; private set; }
}

问候。

关于c# - 没有 setter 的 Automapper 嵌套集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47037827/

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