コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }