Zac*_*ott 16 c# casting automapper
我的表单有两个模型,一个是ViewModel,另一个是来自它的ControlModel.ControlModel具有所有相同的字段名称和层次结构,但所有字段都是字符串数据类型.
您如何编写AutoMapper将字符串字段转换为整数? 我尝试了Int32.Parse(myString)但是Int32在表达式中不可用(给出错误).
Mapper.CreateMap<SourceClass, DestinationClass>()
.ForMember(dest => dest.myInteger,
opt => opt.MapFrom(src => src.myString));
Run Code Online (Sandbox Code Playgroud)
类中的类型及其对应的转换类型:
string to int,int?,double,double?,DateTime和bool
另外,有没有办法以一种方式来推广映射,使用该函数解析目标中的所有整数?换句话说,有没有办法为数据类型创建映射?
编辑:
这很有希望:
AutoMapper.Mapper.CreateMap<string, int>()
.ConvertUsing(src => Convert.ToInt32(src));
Run Code Online (Sandbox Code Playgroud)
编辑:这篇文章真的很有帮助
Zac*_*ott 22
我最终做了这样的事情:
Mapper.CreateMap<string, int>().ConvertUsing<IntTypeConverter>();
Mapper.CreateMap<string, int?>().ConvertUsing<NullIntTypeConverter>();
Mapper.CreateMap<string, decimal?>().ConvertUsing<NullDecimalTypeConverter>();
Mapper.CreateMap<string, decimal>().ConvertUsing<DecimalTypeConverter>();
Mapper.CreateMap<string, bool?>().ConvertUsing<NullBooleanTypeConverter>();
Mapper.CreateMap<string, bool>().ConvertUsing<BooleanTypeConverter>();
Mapper.CreateMap<string, Int64?>().ConvertUsing<NullInt64TypeConverter>();
Mapper.CreateMap<string, Int64>().ConvertUsing<Int64TypeConverter>();
Mapper.CreateMap<string, DateTime?>().ConvertUsing<NullDateTimeTypeConverter>();
Mapper.CreateMap<string, DateTime>().ConvertUsing<DateTimeTypeConverter>();
Mapper.CreateMap<SourceClass, DestClass>();
Mapper.Map(mySourceObject, myDestinationObject);
Run Code Online (Sandbox Code Playgroud)
它引用的类(初稿):
// TODO: Boil down to two with Generics if possible
#region AutoMapTypeConverters
// Automap type converter definitions for
// int, int?, decimal, decimal?, bool, bool?, Int64, Int64?, DateTime
// Automapper string to int?
private class NullIntTypeConverter : TypeConverter<string, int?>
{ protected override int? ConvertCore(string source)
{ if (source == null)
return null;
else
{ int result;
return Int32.TryParse(source, out result) ? (int?) result : null;
} } }
// Automapper string to int
private class IntTypeConverter : TypeConverter<string, int>
{ protected override int ConvertCore(string source)
{ if (source == null)
throw new MappingException("null string value cannot convert to non-nullable return type.");
else
return Int32.Parse(source);
} }
// Automapper string to decimal?
private class NullDecimalTypeConverter : TypeConverter<string, decimal?>
{ protected override decimal? ConvertCore(string source)
{ if (source == null)
return null;
else
{ decimal result;
return Decimal.TryParse(source, out result) ? (decimal?) result : null;
} } }
// Automapper string to decimal
private class DecimalTypeConverter : TypeConverter<string, decimal>
{ protected override decimal ConvertCore(string source)
{ if (source == null)
throw new MappingException("null string value cannot convert to non-nullable return type.");
else
return Decimal.Parse(source);
} }
// Automapper string to bool?
private class NullBooleanTypeConverter : TypeConverter<string, bool?>
{ protected override bool? ConvertCore(string source)
{ if (source == null)
return null;
else
{ bool result;
return Boolean.TryParse(source, out result) ? (bool?) result : null;
} } }
// Automapper string to bool
private class BooleanTypeConverter : TypeConverter<string, bool>
{ protected override bool ConvertCore(string source)
{ if (source == null)
throw new MappingException("null string value cannot convert to non-nullable return type.");
else
return Boolean.Parse(source);
} }
// Automapper string to Int64?
private class NullInt64TypeConverter : TypeConverter<string, Int64?>
{ protected override Int64? ConvertCore(string source)
{ if (source == null)
return null;
else
{ Int64 result;
return Int64.TryParse(source, out result) ? (Int64?)result : null;
} } }
// Automapper string to Int64
private class Int64TypeConverter : TypeConverter<string, Int64>
{ protected override Int64 ConvertCore(string source)
{ if (source == null)
throw new MappingException("null string value cannot convert to non-nullable return type.");
else
return Int64.Parse(source);
} }
// Automapper string to DateTime?
// In our case, the datetime will be a JSON2.org datetime
// Example: "/Date(1288296203190)/"
private class NullDateTimeTypeConverter : TypeConverter<string, DateTime?>
{ protected override DateTime? ConvertCore(string source)
{ if (source == null)
return null;
else
{ DateTime result;
return DateTime.TryParse(source, out result) ? (DateTime?) result : null;
} } }
// Automapper string to DateTime
private class DateTimeTypeConverter : TypeConverter<string, DateTime>
{ protected override DateTime ConvertCore(string source)
{ if (source == null)
throw new MappingException("null string value cannot convert to non-nullable return type.");
else
return DateTime.Parse(source);
} }
#endregion
Run Code Online (Sandbox Code Playgroud)
您可以在源类中创建属性,将属性转换为目标中存在的类型.然后以普通的方式使用AutoMapper.
public class source
{
public int _myfield;
public string MyField
{
get
{
return _myfield.ToString();
}
}
}
public class destination
{
public string MyField { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13244 次 |
| 最近记录: |