使用automapper在动态列表和类列表之间进行字段到字段的映射 [英] Field to field mapping between list of dynamic and list of class with automapper

查看:588
本文介绍了使用automapper在动态列表和类列表之间进行字段到字段的映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个bellow函数,它返回一个动态对象列表



  public 列表< dynamic> getlist()
{
List< dynamic> d = new 列表< dynamic>();

d.Add( new {Name = A,Age = 12 });
d.Add( new {Name = B,年龄= 10 });
d.Add( new {Name = C,年龄= 15 });
d.Add( new {Name = D,年龄= 18 });
d.Add( new {Name = E,年龄= 17 });

return d;

}



并且还有一个班级

  public   class  testclass 
{
public string letter { get ; set ; }
public Int64 频率{ get ; set ; }
}





我使用AutoMapper.5.2.0。我想将动态列表映射到**列表testclass ** class。

有人能举例说明怎么做?



我试过的:



................................. .............................

解决方案

假设你想要一个从一种类型到另一种类型的直接映射,这样的事情应该有效:

 static void CreateDynamicTestClassMap(IMapperConfigurationExpression配置)
{
var dynamicObject = new { Name = default(string),Age = default(int)};
var map = configuration.CreateMap(dynamicObject.GetType(),typeof(testclass));
map.ForMember(nameof(testclass.letter),o => o.MapFrom(nameof(dynamicObject.Name)));
map.ForMember(nameof(testclass.frequency),o => o.MapFrom(nameof(dynamicObject.Age)));
}

...

var config = new MapperConfiguration(CreateDynamicTestClassMap);
config.AssertConfigurationIsValid();

var mapper = config.CreateMapper();
var listOfTestClass = GetList()。选择(mapper.Map< testclass>)。ToList();



注意: CreateDynamicTestClassMap 方法需要与 GetList 方法在同一个程序集中,否则两个动态类型将不匹配。


I have bellow function which returns a list of dynamic object

public List<dynamic> getlist()
            {
                List<dynamic> d = new List<dynamic>();
    
                d.Add(new { Name = "A", Age = 12 });
                d.Add(new { Name = "B", Age = 10 });
                d.Add(new { Name = "C", Age = 15 });
                d.Add(new { Name = "D", Age = 18 });
                d.Add(new { Name = "E", Age = 17 });
    
                return d;
    
            }


and also have a class

public class testclass
        {
            public string letter { get; set; }
            public Int64 frequency { get; set; }
        }



I use AutoMapper.5.2.0 .I want to map the dynamic list with the list of **testclass** class .
can anybody give an example how to do this?

What I have tried:

..............................................................

解决方案

Assuming you want a direct mapping from one type to the other, something like this should work:

static void CreateDynamicTestClassMap(IMapperConfigurationExpression configuration)
{
    var dynamicObject = new { Name = default(string), Age = default(int) };
    var map = configuration.CreateMap(dynamicObject.GetType(), typeof(testclass));
    map.ForMember(nameof(testclass.letter), o => o.MapFrom(nameof(dynamicObject.Name)));
    map.ForMember(nameof(testclass.frequency), o => o.MapFrom(nameof(dynamicObject.Age)));
}

...

var config = new MapperConfiguration(CreateDynamicTestClassMap);
config.AssertConfigurationIsValid();

var mapper = config.CreateMapper();
var listOfTestClass = GetList().Select(mapper.Map<testclass>).ToList();


NB: The CreateDynamicTestClassMap method will need to be in the same assembly as your GetList method, otherwise the two dynamic types will not match.


这篇关于使用automapper在动态列表和类列表之间进行字段到字段的映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆