Пример #1
0
        public void EmittedSerializerIsValid()
        {
            NullableDateTimeConverter converter = new NullableDateTimeConverter();
            DateTime?     date      = new DateTime(2019, 5, 4, 3, 2, 1);
            DynamicMethod serialize = new DynamicMethod("Serialize", typeof(string), new Type[] { typeof(DateTime?), typeof(IFormatProvider), typeof(char) }, typeof(DateTimeConverterTests));

            serialize.GetILGenerator()
            .DeclareLocal <DateTime?>(out LocalBuilder nullableLocal)
            .DeclareLocal <DateTime>(out LocalBuilder local)
            .Newobj <StringBuilder>()
            .Ldarg_0()
            .Emit(gen => converter.EmitAppendToStringBuilder(gen, nullableLocal, local, null))
            .Callvirt <StringBuilder>("ToString")
            .Ret();
            string serialized = (string)serialize.Invoke(null, new object?[] { date, CultureInfo.InvariantCulture, ',' }) !;

            serialized.Should().Be("05/04/2019 03:02:01");
        }
Пример #2
0
        public void CanEmitSerializerWithCustomDateFormat()
        {
            NullableDateTimeConverter converter = new NullableDateTimeConverter();
            DateTime?          date             = new DateTime(2019, 5, 4, 3, 2, 1);
            CsvColumnAttribute attribute        = new CsvColumnAttribute("Date")
            {
                DateFormat = "yyyy/MMM/dd H:mm:ss"
            };
            DynamicMethod serialize = new DynamicMethod("Serialize", typeof(string), new Type[] { typeof(DateTime?), typeof(IFormatProvider), typeof(char) }, typeof(DateTimeConverterTests));

            serialize.GetILGenerator()
            .DeclareLocal <DateTime?>(out LocalBuilder nullableLocal)
            .DeclareLocal <DateTime>(out LocalBuilder local)
            .Newobj <StringBuilder>()
            .Ldarg_0()
            .Emit(gen => converter.EmitAppendToStringBuilder(gen, nullableLocal, local, attribute))
            .Callvirt <StringBuilder>("ToString")
            .Ret();
            string serialized = (string)serialize.Invoke(null, new object?[] { date, CultureInfo.InvariantCulture, ',' }) !;

            serialized.Should().Be("2019/May/04 3:02:01");
        }