public void EmittedDeserializerDeserializesEmptyStringIntoNull() { NullableDateTimeConverter converter = new NullableDateTimeConverter(); string text = ""; DynamicMethod deserialize = new DynamicMethod("Deserialize", typeof(DateTime?), new Type[] { typeof(ReadOnlyMemory <char>), typeof(IFormatProvider) }, typeof(DateTimeConverterTests)); deserialize.GetILGenerator() .DeclareLocal <DateTime?>(out LocalBuilder nullableLocal) .DeclareLocal <DateTime>(out LocalBuilder local) .Ldarga_S(0) .Emit(gen => converter.EmitDeserialize(gen, nullableLocal, local, null)) .Ret(); DateTime?deserialized = (DateTime?)deserialize.Invoke(this, new object?[] { text.AsMemory(), CultureInfo.InvariantCulture }) !; deserialized.Should().Be(null); }
public void CanEmitDeserializerWithCustomDateFormat() { NullableDateTimeConverter converter = new NullableDateTimeConverter(); string text = "2019/May/04 3:02:01"; CsvColumnAttribute attribute = new CsvColumnAttribute("Date") { DateFormat = "yyyy/MMM/dd H:mm:ss" }; DynamicMethod deserialize = new DynamicMethod("Deserialize", typeof(DateTime?), new Type[] { typeof(ReadOnlyMemory <char>), typeof(IFormatProvider) }, typeof(DateTimeConverterTests)); deserialize.GetILGenerator() .DeclareLocal <DateTime?>(out LocalBuilder nullableLocal) .DeclareLocal <DateTime>(out LocalBuilder local) .Ldarga_S(0) .Emit(gen => converter.EmitDeserialize(gen, nullableLocal, local, attribute)) .Ret(); DateTime?deserialized = (DateTime?)deserialize.Invoke(this, new object?[] { text.AsMemory(), CultureInfo.InvariantCulture }) !; deserialized.Should().Be(new DateTime(2019, 5, 4, 3, 2, 1)); }