AutoMapper: How to parse an Int from a String and possible to creating rules based on data type?

后端 未结 3 1401
迷失自我
迷失自我 2020-12-30 01:38

I have two models for my form, a ViewModel going to it, and a ControlModel coming from it. The ControlModel has all the same field names and hierarchy, but all of the field

3条回答
  •  自闭症患者
    2020-12-30 02:07

    I ended up doing something like this:

    Mapper.CreateMap().ConvertUsing();
    Mapper.CreateMap().ConvertUsing();
    Mapper.CreateMap().ConvertUsing();
    Mapper.CreateMap().ConvertUsing();
    Mapper.CreateMap().ConvertUsing();
    Mapper.CreateMap().ConvertUsing();
    Mapper.CreateMap().ConvertUsing();
    Mapper.CreateMap().ConvertUsing();
    Mapper.CreateMap().ConvertUsing();
    Mapper.CreateMap().ConvertUsing();
    
    Mapper.CreateMap();
    
    Mapper.Map(mySourceObject, myDestinationObject);
    

    And the classes it references (first draft):

    // 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
    {   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
    {   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
    {   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
    {   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
    {   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
    {   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
    {   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
    {   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
    {   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
    {   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
    

提交回复
热议问题