Exemplo n.º 1
0
        public void ReadCsv_ClassWithNullableCompositeStruct_ObjectsWithNullValues()
        {
            var serializer = new CsvSerializerContext()
            {
                ThrowOnFailedDeserialize = false
            };
            var converter = new SingleNullableStructValueCsvConverter();

            serializer.Converters.Add(converter);
            serializer.Converters.Add(new CompositeStructCsvConverter());

            string[] csv = new string[] {
                "ValueId,ValueDuration",        // header
                "1,15.24",                      // first record
                ",",                            // second empty record
                "2,-99.24",                     // third record
                ""                              // empty line after the last record
            };

            List <SingleNullableStructValue> result = new List <SingleNullableStructValue>();

            using (var source = new StringReader(String.Join(Environment.NewLine, csv)))
                using (var reader = new CsvReader(source, serializer.Configuration))
                {
                    var naming = new CsvHeaderNamingContext();

                    if (reader.Read())
                    {
                        converter.ReadCsvHeader(reader, serializer);
                    }

                    while (reader.Read())
                    {
                        result.Add((SingleNullableStructValue)converter.ReadCsv(reader, typeof(SingleNullableStructValue), serializer, naming));
                    }
                }

            Assert.AreEqual(3, result.Count);

            Assert.IsNotNull(result[0]);
            Assert.IsTrue(result[0].Value.HasValue);
            Assert.AreEqual(1, result[0].Value.Value.Id);
            Assert.AreEqual(15.24, result[0].Value.Value.Duration);

            Assert.IsNotNull(result[1]);
            Assert.IsFalse(result[1].Value.HasValue);

            Assert.IsNotNull(result[2]);
            Assert.IsTrue(result[2].Value.HasValue);
            Assert.AreEqual(2, result[2].Value.Value.Id);
            Assert.AreEqual(-99.24, result[2].Value.Value.Duration);
        }
Exemplo n.º 2
0
        public void WriteCsv_ClassWithNullableCompositeStruct_RecordsWithNullValues()
        {
            var serializer = new CsvSerializerContext();
            var converter  = new SingleNullableStructValueCsvConverter();

            serializer.Converters.Add(converter);
            serializer.Converters.Add(new CompositeStructCsvConverter());

            var target = new StringWriter();
            var writer = new CsvWriter(target, serializer.Configuration);

            converter.WriteCsvHeader(writer, typeof(SingleNullableStructValue), serializer, new CsvHeaderNamingContext());
            writer.NextRecord();

            converter.WriteCsv(new SingleNullableStructValue()
            {
                Value = new CompositeStruct()
                {
                    Id = 1, Duration = 15.24
                }
            }, writer, serializer);
            writer.NextRecord();

            converter.WriteCsv(new SingleNullableStructValue()
            {
                Value = null
            }, writer, serializer);
            writer.NextRecord();

            converter.WriteCsv(new SingleNullableStructValue()
            {
                Value = new CompositeStruct()
                {
                    Id = 2, Duration = -99.24
                }
            }, writer, serializer);
            writer.NextRecord();

            writer.Dispose();
            target.Close();

            string[] expected = new string[] {
                "ValueId,ValueDuration",        // header
                "1,15.24",                      // first record
                ",",                            // second empty record
                "2,-99.24",                     // third record
                ""                              // empty line after the last record
            };

            Assert.AreEqual(String.Join(Environment.NewLine, expected), target.ToString());
        }