public void DuplicateFieldNamesTest()
        {
            var headerNameCounts = new Dictionary <string, int>();
            var config           = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                GetDynamicPropertyName = args =>
                {
                    var header = args.Context.Reader.HeaderRecord[args.FieldIndex];
                    var prepareHeaderForMatchArgs = new PrepareHeaderForMatchArgs
                    {
                        FieldIndex = args.FieldIndex,
                        Header     = header,
                    };
                    header = args.Context.Reader.Configuration.PrepareHeaderForMatch(prepareHeaderForMatchArgs);
                    var name = headerNameCounts[header] > 1 ? $"{header}{args.FieldIndex}" : header;

                    return(name);
                },
            };
            var parser = new ParserMock(config)
            {
                { "Id", "Name", "Name" },
                { "1", "foo", "bar" },
                null
            };

            using (var csv = new CsvReader(parser))
            {
                csv.Read();
                csv.ReadHeader();
                var counts =
                    (from header in csv.Context.Reader.HeaderRecord.Select((h, i) => csv.Configuration.PrepareHeaderForMatch(new PrepareHeaderForMatchArgs {
                    FieldIndex = i, Header = h
                }))
                     group header by header into g
                     select new
                {
                    Header = g.Key,
                    Count = g.Count()
                }).ToDictionary(x => x.Header, x => x.Count);
                foreach (var count in counts)
                {
                    headerNameCounts.Add(count.Key, count.Value);
                }

                var records = csv.GetRecords <dynamic>().ToList();
                var record  = records[0];
                Assert.AreEqual("1", record.Id);
                Assert.AreEqual("foo", record.Name1);
                Assert.AreEqual("bar", record.Name2);
            }
        }
        /// <summary>
        /// Returns the header name ran through <see cref="PrepareHeaderForMatch(PrepareHeaderForMatchArgs)"/>.
        /// If no header exists, property names will be Field1, Field2, Field3, etc.
        /// </summary>
        /// <param name="args">The args.</param>
        public static string GetDynamicPropertyName(GetDynamicPropertyNameArgs args)
        {
            if (args.Context.Reader.HeaderRecord == null)
            {
                return($"Field{args.FieldIndex + 1}");
            }

            var header = args.Context.Reader.HeaderRecord[args.FieldIndex];
            var prepareHeaderForMatchArgs = new PrepareHeaderForMatchArgs(header, args.FieldIndex);

            header = args.Context.Reader.Configuration.PrepareHeaderForMatch(prepareHeaderForMatchArgs);

            return(header);
        }
Beispiel #3
0
 /// <summary>
 /// Returns the <see name="PrepareHeaderForMatchArgs.Header"/> as given.
 /// </summary>
 public static string PrepareHeaderForMatch(PrepareHeaderForMatchArgs args)
 {
     return(args.Header);
 }