C# 数据表可为空<;布尔>;对于Automapper和DynamicMap,指定的强制转换无效

C# 数据表可为空<;布尔>;对于Automapper和DynamicMap,指定的强制转换无效,c#,datatable,automapper,C#,Datatable,Automapper,我伤脑筋已经有一段时间了,我好像没法让它起作用 测试类别: public class SourceTest { public int ID { get; set; } public Int32 BVAL { get; set; } } public class DestinationTest { public int ID { get; set; } public Nullable<bool> BVAL { get; set; } } 公共类Sou

我伤脑筋已经有一段时间了,我好像没法让它起作用

测试类别:

public class SourceTest
{
    public int ID { get; set; }
    public Int32 BVAL { get; set; }
}

public class DestinationTest
{
    public int ID { get; set; }
    public Nullable<bool> BVAL { get; set; }
}
公共类SourceTest
{
公共int ID{get;set;}
公共Int32 BVAL{get;set;}
}
公共类目的测试
{
公共int ID{get;set;}
公共可空BVAL{get;set;}
}
这项工作:

 SourceTest t = new SourceTest( );
 t.ID = 1;
 t.BVAL = 1;

 AutoMapper.Mapper.CreateMap<SourceTest, DestinationTest>( );
 AutoMapper.Mapper.AssertConfigurationIsValid( );
 DestinationTest dest_test =  AutoMapper.Mapper.Map<SourceTest, DestinationTest>( t );
 bool? desttest = dest_test.BVAL; //true
SourceTest t=newsourcetest();
t、 ID=1;
t、 BVAL=1;
AutoMapper.Mapper.CreateMap();
AutoMapper.Mapper.AssertConfigurationsValid();
DestinationTest dest_test=AutoMapper.Mapper.Map(t);
布尔?dest test=dest_test.BVAL//真的
这不起作用:

DataTable tdt = new DataTable( );
tdt.Columns.Add( "ID", typeof( Int32 ) );
tdt.Columns.Add( "BVAL", typeof( Int32 ) );
tdt.Rows.Add( new object[] { 1, 1 } );

List<DestinationTest> t2 = AutoMapper.Mapper.DynamicMap<IDataReader, List<DestinationTest>>( tdt.CreateDataReader( ) );//Exception: {"Specified cast is not valid."}

 bool? bt = t2[0].BVAL; 
DataTable tdt=newdatatable();
添加(“ID”,typeof(Int32));
tdt.Columns.Add(“BVAL”,typeof(Int32));
Add(新对象[]{1,1});
List t2=AutoMapper.Mapper.DynamicMap(tdt.CreateDataReader())//异常:{“指定的强制转换无效。”}
布尔?bt=t2[0].BVAL;
但是,如果目的地如下所示,则它可以工作:

public class DestinationTest
{
    public int ID { get; set; }
    public Nullable<int> BVAL { get; set; }
}
公共类DestinationTest
{
公共int ID{get;set;}
公共可空BVAL{get;set;}
}
然而,这自然违背了目的

关于为什么Dynamicmap不想转换为可为null的bool,而法线映射工作正常,有什么想法吗

编辑: 我尝试过此代码的各种版本,但也不起作用:

private class NullBooleanTypeConverter : AutoMapper.TypeConverter<In32, Nullable<bool>>
    {
        protected override Nullable<bool> ConvertCore( Int32 source )
        {
            if ( source == null )
                return null;
            else
            {
                return source != 0;
            }
        }
    }
私有类NullBooleanTypeConverter:AutoMapper.TypeConverter
{
受保护的重写可为空的ConvertCore(Int32源)
{
if(source==null)
返回null;
其他的
{
返回源!=0;
}
}
}
在尝试转换之前,我几乎肯定会告诉Automapper有关转换器的信息:

AutoMapper.Mapper.CreateMap<Int32, Nullable<bool>>( ).ConvertUsing<NullBooleanTypeConverter>( );
AutoMapper.Mapper.CreateMap().ConvertUsing();
如果我尝试调试,似乎从未使用过转换器


我不知道如何继续。

我在github页面上问了同样的问题: github.com/AutoMapper/AutoMapper/issues/454

目前似乎没有办法做到这一点。答案是:

数据读取器映射中不使用转换器和解析器,这些 通过一条完全独立的管道。转换类型并不重要 此版本中支持

好了