Back to Csvhelper

Migrating from version 22 to 23

docs/migration/v23/index.html

33.1.04.6 KB
Original Source

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));