Nullable datetime to datetime converter automapper -


i have situation dtos require datetime properties pocos use nullable datetimes. avoid having create formember mappings every property condition created itypeconverter<datetime?, datetime>. problem ran when both dto , poco have nullable datetimes converter called. destinationtype datetime though property nullable datetime. idea how make converter run actual nullable datetimes?

public class foodto {     public datetime? foodate { get; set; } }  public class foopoco {     public datetime? foodate { get; set; } }  class program {     static void main(string[] args)     {         mapper.createmap<foodto, foopoco>();         mapper.createmap<datetime?, datetime>()               .convertusing<nullabledatetimeconverter>();         var poco = new foopoco();         mapper.map(new foodto() { foodate = null }, poco);          if (poco.foodate.hasvalue)             console.writeline(                 "this should null : {0}",                 poco.foodate.value.tostring()); //value set          else             console.writeline("mapping worked");     } }  public class nullabledatetimeconverter : itypeconverter<datetime?, datetime> {     // since both nullable date times , handles converting     // nullable datetime not expect called.      public datetime convert(resolutioncontext context)     {         var sourcedate = context.sourcevalue datetime?;         if (sourcedate.hasvalue)             return sourcedate.value;         else             return default(datetime);     } } 

i found post automapper typeconverter mapping nullable type not-nullable type little help.

without looking suspect calling typecoverter because best match types being converted.

if create typeconverter correct types should work fine. eg:

public class datetimeconverter : itypeconverter<datetime?, datetime> {     public datetime convert(resolutioncontext context)     {         var sourcedate = context.sourcevalue datetime?;         if (sourcedate.hasvalue)             return sourcedate.value;         else             return default(datetime);     } }  public class nullabledatetimeconverter : itypeconverter<datetime?, datetime?> {     public datetime? convert(resolutioncontext context)     {         var sourcedate = context.sourcevalue datetime?;         if (sourcedate.hasvalue)             return sourcedate.value;         else             return default(datetime?);     } } 

note if wish these can further simplified to

public class datetimeconverter : typeconverter<datetime?, datetime> {     protected override datetime convertcore(datetime? source)     {         if (source.hasvalue)             return source.value;         else             return default(datetime);     } }  public class nullabledatetimeconverter : typeconverter<datetime?, datetime?> {     protected override datetime? convertcore(datetime? source)     {         return source;     } } 

then initialise both converters:

mapper.createmap<datetime?, datetime>().convertusing<datetimeconverter>(); mapper.createmap<datetime?, datetime?>().convertusing<nullabledatetimeconverter>(); mapper.assertconfigurationisvalid(); 

Comments

Popular posts from this blog

linux - Does gcc have any options to add version info in ELF binary file? -

android - send complex objects as post php java -

charts - What graph/dashboard product is facebook using in Dashboard: PUE & WUE -