Migrating from version 22 to 23
CsvConfiguration
All the constructor parameters were removed in favor of using property setters. Apply this change to any of the options.
// v22
var config = new CsvConfiguration(CultureInfo.InvariantCulture, delimiter = ";");
// v23
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Delimiter = ";",
};
Delegates
All delegates now take in a single struct argument.
BadDataFound
// v22
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
BadDataFound = (field, context) =>
{
Console.WriteLine($"field: {field}");
Console.WriteLine($"context: {context}");
},
};
// v23
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
BadDataFound = args =>
{
Console.WriteLine($"field: {args.Field}");
Console.WriteLine($"context: {args.Context}");
},
};
ConvertFromString
// v22
Map(m => m.Property).Convert(row => row.GetField(0));
// v23
Map(m => m.Property).Convert(args => args.Row.GetField(0));
ConvertToString
// v22
Map(m => m.Property).Convert(value => value.ToString());
// v23
Map(m => m.Property).Convert(args => args.Value.ToString());
GetConstructor
// v22
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
GetConstructor = classType => classType.GetConstructors().First(),
};
// v23
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
GetConstructor = args => args.ClassType.GetConstructors().First(),
};
GetDynamicPropertyName
// v22
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
GetDynamicPropertyName = (fieldIndex, context) => $"Field{fieldIndex}";
};
// v23
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
GetDynamicPropertyName = args => $"Field{args.FieldIndex}",
};
HeaderValidated
// v22
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HeaderValidated = (invalidHeaders, context) => Console.WriteLine($"Invalid headers count: {invalidHeaders.Count}"),
};
// v23
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HeaderValidated = args => Console.WriteLine($"Invalid headers count: {args.InvalidHeaders.Count}"),
};
MissingFieldFound
// v22
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
MissingFieldFound = (headerNames, index, context) => Console.WriteLine($"Missing field: {headerNames[0]}"),
};
// v23
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
MissingFieldFound = args => Console.WriteLine($"Missing field: {args.HeaderNames[0]}"),
};
PrepareHeaderForMatch
// v22
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
PrepareHeaderForMatch = (header, fieldIndex) => header.ToLower(),
};
// v23
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
PrepareHeaderForMatch = args => args.Header.ToLower(),
};
ReadingExceptionOccurred
// v22
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ReadingExceptionOccurred = exception =>
{
Console.WriteLine(exception.Message);
throw args.Exception;
},
};
// v23
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ReadingExceptionOccurred = args =>
{
Console.WriteLine(args.Exception.Message);
throw args.Exception;
},
};
ReferenceHeaderPrefix
// v22
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ReferenceHeaderPrefix = (memberType, memberName) => $"{memberName}.",
};
// v23
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ReferenceHeaderPrefix = args => $"{args.MemberName}.",
};
ShouldQuote
// v22
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ShouldQuote = (field, fieldType, row) => true,
};
// v23
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ShouldQuote = args => true,
};
ShouldSkipRecord
// v22
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ShouldSkipRecord = (records) => record.Length == 0,
};
// v23
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ShouldSkipRecord = args => args.Record.Length == 0,
};
ShouldUseConstructorParameters
// v22
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ShouldUseConstructorParameters = type => true;
};
// v23
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ShouldUseConstructorParameters = args => true;
};
Validate
// v22
Map(m => m.Property).Validate(field => !string.IsNullOrEmpty(field));
// v23
Map(m => m.Property).Validate(args => !string.IsNullOrEmpty(args.Field));