diff options
Diffstat (limited to 'ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/change-log/index.md')
-rw-r--r-- | ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/change-log/index.md | 1862 |
1 files changed, 1862 insertions, 0 deletions
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/change-log/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/change-log/index.md new file mode 100644 index 0000000..bd6b576 --- /dev/null +++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/change-log/index.md @@ -0,0 +1,1862 @@ +# Change Log + +### 30.0.1 + +#### Bug Fixes + +- Fixed issue when writing with the escape char not being escaped if it was different than the quote char. +- Fixed issue with `CsvWriter` not passing `leavOpen` parameter to other constructor call. +- Fixed issue with TypeConverter being assigned to a member that has a Convert expression assigned to it. + +### 30.0.0 + +#### Features + +- Added `Field` and `RawRecord` to `BadDataException`. +- Pass `IWriterConfiguration` into `CsvWriter` constructor instead of `CsvConfiguration`. +- Allow inherited header prefixes. +- Allow mapping to dynamic properties. +- Added `MemberName` to the type converter exception message. +- Added `MaxFieldSize` configuration. If max size is set and the size is reached, `MaxFieldSizeException` is thrown. +- Added class level attribute capability. + New Attributes: + - `BufferSizeAttribute` + - `CacheFieldsAttribute` + - `CommentAttribute` + - `CountBytesAttribute` + - `DelimiterAttribute` + - `DetectColumnCountChangesAttribute` + - `DetectDelimiterAttribute` + - `DetectDelimiterValueAttribute` + - `EncodingAttribute` + - `EscapeAttribute` + - `ExceptionMessagesContainRawDataAttribute` + - `HasHeaderRecordAttribute` + - `IgnoreBlankLinesAttribute` + - `IgnoreReferencesAttribute` + - `IncludePrivateMembersAttribute` + - `InjectionCharactersAttribute` + - `InjectionEscapeCharacterAttribute` + - `InjectionOptionsAttribute` + - `LineBreakInQuotedFieldIsBadDataAttribute` + - `MaxFieldSizeAttribute` + - `ModeAttribute` + - `NewLineAttribute` + - `ProcessFieldAttribute` + - `QuoteAttribute` + - `TrimOptionsAttribute` + - `UseNewObjectForNullReferenceMembersAttribute` + - `WhiteSpaceCharsAttribute` +- Added `params object[] constructorArgs` to `TypeConverterAttribute`. +- Added validation message expression to `Validate` mapping. +- Added `IReaderRow` to `ValidateArgs`. +- Relax `Default` and `Constant` type constraints to `IsAssignableFrom`. + +#### Bug Fixes + +- Added `null` check in `WriteRecords`. +- Fixed interpolation in exception message. +- Fixed constructor mapping issue where parameter has a type converter but would still try and use constructor mapping. + +#### Breaking Changes + +- Added `string field` and `string rawRecord` to `BadDataException` constructor. +- Added `double MaxFieldSize { get; }` to `IParserConfiguration`. +- Added `bool LeaveOpen { get; }` to `IWriterConfiguration`. +- Added `bool LeaveOpen { get; }` to `IParserConfiguration`. +- Added `IReaderRow row` to `ValidateArgs` constructor. + +### 29.0.0 + +#### Features + +- Added support for `TypeConverter` factories. This allows for the ability to handle many types at once. +Code that manually handle nullable, enums, and collections were changed into factories. +- Moved delimiter detection into a configuration function. +This allows for a user to easily change the detection logic. +Default logic is in `ConfigurationFunction.GetDelimiter`. +- Changed `CsvConfiguration.SanitizeInjection` flag to `CsvConfiguration.InjectionOptions` enum. + - Options are: + - None - Default. Does no injection protection. The is default because it's not a part of CSV and is used for an external tool. + - Escape - Escapes the field based on OWASP recommendations if an injection char is detected. + - Strip - Removes the injection character. + - Exception - Throws an exception if an injection char is detected. + - Added `\t` and `\r` to `CsvConfiguration.InjectionEscapeCharacter`. + - Changed `CsvConfiguration.InjectionEscapeCharacter` from `\t` to `'`. +- `CsvDataReader.GetDataTypeName` will use types when the schema table is overridden. +- More detail added to `CsvConfiguration.Validate` exception messages. +- Reduce double dictionary lookup in a few places. + +#### Bug Fixes + +- Fixed issues with delimiter detection logic. +- Missing `ConfigureAwait(false)` added to async calls. +- Fixed issue with `CsvReader.TryGetField` throwing an exception when multiple headers are read. +- Fixed issue with `MemberMap.Validate` passing the wrong type into the expression call. +- Fixed issue with `MemberMap<T>.Convert` not working with `static` methods. +- Fixed issue with `DateTimeConverter` and `DateTimeOffsetConverter` throwing an exception other than `TypeConverterException` on failure. +- Fixed issue where `MissingFieldFound` was not being called if `IgnoreBlankLines` was off. + +#### Breaking Changes + +- `CsvConfiguration.SanitizeForInjection` -> `CsvConfiguration.InjectionOptions` +- `bool IWriterConfiguration.SanitizeForInjection` -> `InjectionOptions IWriterConfiguration.InjectionOptions` +- `CsvConfiguration.InjectionEscapeCharacter` changed from `\t` to `'`. +- Added `\t` and `\r` to `CsvConfiguration.InjectionCharacters`. +- Added `GetDelimiter IParserConfiguration.GetDelimiter` delegate. + +### 28.0.1 + +#### Bug Fixes + +- Disabled nullable until all null issues are fixed. + +### 28.0.0 + +#### Features + +- Updated delimiter detection algorithm. + - Strips escaped text based on mode. + - Only looks for delimiters that appear on every line. + - Uses `CultureInfo.TextInfo.ListSeparator` if it's on every line. +- Cache processed fields in parser so they're not processed on every access. +- Cache `CsvParser.Record[]` so multiple calls wont' regenerate it. +- `ShouldSkipRecord` is `null` by default and won't get called if not set. +- `ShouldSkipRecordArgs` holds `IReaderRow` now instead of `string[]`. +- Changed `CsvParser` constructor to take in `IParserConfiguration` instead of `CsvConfiguration`. +- Changed `CsvReader` constructor to take in `IReaderConfiguration` instead of `CsvConfiguration`. + +#### Bug Fixes + +- Fixed issue where collection types weren't getting the correct `MemberMapData` passed to them when converting the item. +- Fixed issue where `BadDataFound` was being called multiple times for the same field. +- Fixed issue where you can't read with no header when a name has been mapped. +- Fixed issue where quoted fields not correctly being identified if there was a buffer swap on white space before quote. + +#### Breaking Changes + +- `ShouldSkipRecordArgs` holds `IReaderRow` now instead of `string[]`. +- Removed `ConfigurationFunctions.ShouldSkipRecord` as the default is now `null`. +- Added `IParserConfiguration.Validate`. + +### 27.2.1 + +#### Bug Fixes + +- Changed dependencies to minimal needed version. + +### 27.2.0 + +#### Features + +- Support for net60 `DateOnly` and `TimeOnly` types. + +### 27.1.1 + +#### Bug Fixes + +- Fixed issue with delimiter detection in parser async read. + +### 27.1.0 + +#### Features + +- Added IgnoreBaseAttribute to not look at the base class when auto mapping. + +### 27.0.4 + +#### Bug Fixes + +- Changed delimiter detection to look line by line instead of the full buffer. + +### 27.0.3 + +#### Bug Fixes + +- Specified exact dependency version matches. + +### 27.0.2 + +#### Bug Fixes + +- Fixed issue with delimiter detection. + +### 27.0.1 + +#### Bug Fixes + +- `\t` wasn't removed and just an exception was being thrown. + +### 27.0.0 + +#### Features + +- Config option to auto detect delimiter. Off by default. +- Added ability to apply a type converter to all registered types. +- Added ability to apply type converter options to all registered types. +- Added ability to pass an IAsyncEnumerable to WriteRecords. +- Added option to use default value on conversion failure. + +#### Breaking Changes + +- Added `IParserConfiguration.DetectDelimiter`. +- Added `IParserConfiguration.DetectDelimiterValues`. +- Added `IWriter.WriteRecordsAsync<T>(IAsyncEnumerable<T> records, CancellationToken cancellationToken = default)`. +- Removed `\t` from `CsvConfiguration.WhiteSpaceChars` as a default. + +### 26.1.0 + +#### Features + +- Allow schema of destination table to be specified in CsvDataReader. + +### 26.0.1 + +#### Bug Fixes + +- Fixed issue with constant not working when the field is missing. + +### 26.0.0 + +#### Features + +- Added configuration for `ExceptionMessagesContainRawData` that defaults to true. + +#### Bug Fixes + +- Removed all `init` properties. These were causing people too many problems. +- Fixed issue with exception message not containing the header record. + +#### Breaking Changes + +- Added `bool IParserConfiguration.ExceptionMessagesContainRawData { get; }`. +- Added `bool IWriterConfiguration.ExceptionMessagesContainRawData { get; }`. +- All delegate args objects have `init` removed and now have constructors with parameters. + - BadDataFound + - ConvertFromString + - GetConstructor + - GetDynamicPropertyName + - HeaderValidated + - MissingFieldFound + - PrepareHeaderForMatch + - ReadingExceptionOccurred + - ReferenceHeaderPrefix + - ShouldQuote + - ShouldSkipRecord + - ShouldUseConstructorParameter + - Validate + +### 25.0.0 + +#### Bug Fixes + +- Fixed stack overflow issue with accessing Parser[int] or Parser.Record in BaddataFound callback. Throws an exception explaining issue now. + +#### Breaking Changes + +- All delegate args had their non-parameterless constructor removed in favor of using `init`. + +### 24.0.1 + +#### Bug Fixes + +- Fixed issue with Trimming all white space. + +### 24.0.0 + +#### Features + +- Added `CancellationToken` to reading and writing async methods. + +#### Bug Fixes + +- Fixed issue with `ShouldQuote` not having the correct field type when writing records instead of fields. +- Fixed issue with `CharCount` and `ByteCount` when trimming. + +#### Breaking Changes + +- `void IWriterRow.WriteConvertedField(string field)` -> `void IWriterRow.WriteConvertedField(string field, Type fieldType)` +- `void CsvWriter.WriteConvertedField(string field)` -> `void CsvWriter.WriteConvertedField(string field, Type fieldType)` + +### 23.0.0 + +#### Features + +- Changed public `init` properties to `set`. Once VB.NET implements `init`, it can change back. +- Made method `CsvWriter.WriteBuffer` protected so sub classes can write fields. +- `CsvWriter.Flush` and `CsvWriter.FlushAsync` will now flush the underlying `TextWriter`. +- Changed all `delegate` methods to accept an args `struct` instead of parameters. This makes it easier to understand what parameters are passed in, and allows for additional parameters to be added later without a breaking change. + +#### Breaking Changes + +- Removed the large `CsvConfiguration` constructor. The properties are now settable, so this isn't needed for VB.NET. +- All delegates now take in a single struct argument. + - BadDataFound + - ConvertFromString + - GetConstructor + - GetDynamicPropertyName + - HeaderValidated + - MissingFieldFound + - PrepareHeaderForMatch + - ReadingExceptionOccurred + - ReferenceHeaderPrefix + - ShouldQuote + - ShouldSkipRecord + - ShouldUseConstructorParameter + - Validate + +### 22.1.2 + +#### Bug Fixes + +- Fixed issue with data corruption when parser buffer ran out in middle of escape and quote. + +### 22.1.1 + +#### Bug Fixes + +- Fixed issue where CsvConfiguration.NewLine was being set when value is null in constructor causing IsNewLine to be true. + +### 22.1.0 + +#### Features + +- Added `[EnumIgnoreAttribute]`. + +### Bug Fixes + +- Fixed issue with `EnumIgnoreCase` value not making it to the converter when reading. + +### 22.0.0 + +#### Features + +- Changed `ParserMode` to `CsvMode` and added the modes to `CsvWriter`. +- Added `Type fieldType` parameter to `ShouldQuote` delegate. +- Added `TypeConverterOptions.EnumIgnoreCase` (default is false). Allows `EnumConverter` to ignore case when matching enum names, values, or `NameAttribute`. + +#### Bug Fixes + +- Fixed issue with `EnumConverter` when duplicate names or values appeared in an Enum. + +#### Breaking Changes + +- `ParserMode` -> `CsvMode` +- Added `IParserConfiguration.ProcessFieldBufferSize`. +- Added `IWriterConfiguration.Mode`. +- `ShouldQuote(string, IWriterRow)` -> `ShouldQuote(string, Type, IWriterRow)`. +- `EnumConverter` was changed to case sensitive by default. + +### 21.3.1 + +#### Bug Fixes + +- Fixed issue with CsvContext not being passed into AutoMap. + +### 21.3.0 + +#### Features + +- Added back Excel compatibility for bad data fallback. + 1. If a field doesn't start with a `Quote`, read until a `Delimiter` or `NewLine` is found. + 1. If in quoted field and a `Quote` is found that isn't preceded by an `Escape`, read until a `Delimiter or `NewLine` is found. + 1. `TrimOptions.Trim` will be applied before these rules. + +### 21.2.1 + +#### Bug Fixes + +- Fixed issue with processed field buffer not being large enough on resize. + +### 21.2.0 + +#### Features + +- Process boolean and null type converter options when writing. + +### 21.1.2 + +#### Bug Fixes + +- Fixed parsing issue with state not being reset when buffer is filled in the middle of a state. + +### 21.1.1 + +#### Bug Fixes + +- Fixed parsing issue with buffer ending in the middle of a line ending. + +### 21.1.0 + +#### Features + +- Added ParserMode.NoEscape. This will ignore quotes and escape characters. + +### 21.0.6 + +#### Bug Fixes + +- Fixed issue with writing a field that is larger then 2x the buffer size. + +### 21.0.5 + +#### Bug Fixes + +- Fixed issue with VB not being able to set `init` properties on CsvConfiguration by adding a constructor that takes in all properties as optional named arguments. + +### 21.0.4 + +#### Bug Fixes + +- Fixed issue with cache miss in on both the reader and writer. + +### 21.0.3 + +No changes. + +### 21.0.2 + +#### Bug Fixes + +- Fixed issue with `CsvConfiguration.NewLine` not defaulting to '\r\n'. + +### 21.0.1 + +#### Big Fixes + +- Fixed issue with `CsvWriter` not keeping track of `Row` and `Index`. + +### 21.0.0 + +#### Features + +- `CsvConfiguration.NewLine` changed to a `string`. You can now read and write any string you like for a line ending. This defaults to `Environment.NewLine`. When reading, if the value is not explicitly set `\r\n`, `\r`, or `\n` will still be used. + +#### Bug Fixes + +- Fixed issue with other platforms than net50 using `init`. +- Fixed issue with being unable to write \r\n in an environment that does use that for `Environment.NewLine`. + +#### Breaking Changes + +- `char? CsvConfiguration.NewLine` changed to `string CsvConfiguration.NewLine`. + +### 20.0.0 + +#### Features + +- Parser performance. +- Writer performance. +- Changed CsvConfiguration to a read only `record` to eliminate threading issues. +- Unix parsing mode. Uses escape character instead of field quoting. Configurable `NewLine`. +- Field caching. Disabled by default. When enabled, this will cache all fields created so duplicate fields won't need to create a new string from a character array. + +#### Breaking Changes + +- Removed `Caches` enum. +- `ReadingContext` and `WritingContext` were merged into a single `CsvContext`. Anywhere that used either was changed to `CsvContext`. +- All `Func`s and `Action`s now have their own `delegate`. +- `ConvertUsing` renamed to `Convert`. +- `ShouldQuote` now takes in `IWriterRow` instead of `CsvContext`. +- `CsvConfiguration` changed from a `class` to a `record`. +- All `CsvConfiguration` properties changed to read only `get; init;`. +- `CsvConfiguration.NewLine` changed to `char?`. +- `CsvConfiguration.NewLineString` removed. +- `CsvConfiguration.RegisterClassMap` moved to `CsvContext`. +- `CsvConfiguration.UnregisterClassMap` moved to `CsvContext`. +- `CsvConfiguration.AutoMap` moved to `CsvContext`. +- All `IParserConfiguration` setters removed. +- `bool IParserConfiguration.CacheFields` added. +- `bool IParserConfiguration.LeaveOpen` added. +- `char? IParserConfiguration.NewLine` added. +- `ParserMode IParserConfiguration.Mode` added. +- `IParserConfiguration.IgnoreQuotes` removed. +- `char[] IParserConfiguration.WhiteSpaceChars` added. +- All `IReaderConfiguration` setters removed. +- `IReaderConfiguration.TypeConverterOptionsCache` removed. +- `IReaderConfiguration.TypeConverterCache` removed. +- `IReaderConfiguration.Maps` removed. +- `IReaderConfiguration.RegisterClassMap` removed. +- `IReaderConfiguration.UnregisterClassMap` removed. +- `IReaderConfiguration.AutoMap` removed. +- `ISerializerConfiguration` removed and properties added to `IWriterConfiguration`. +- All `IWriterConfiguration` setters removed. +- `IWriterConfiguration.QuoteString` removed. +- `IWriterConfiguration.TypeConverterCache` removed. +- `IWriterConfiguration.MemberTypes` removed. +- `IWriterConfiguration.Maps` removed. +- `IWriterConfiguration.RegisterClassMap` removed. +- `IWriterConfiguration.UnregisterClassMap` removed. +- `IWriterConfiguration.AutoMap` removed. +- `MemberMap.Optional` added. +- `MemberMap<TClass, TMember>.ConvertUsing` renamed to `Convert`. +- `CsvFieldReader` removed. +- `CsvParser.Read` returns `boolean` instead of `string[]`. +- `CsvParser` constructors that take in a `FieldReader` removed. +- `CsvParser[int index]` added to retrieve fields after a `Read`. +- `CsvSerializer` removed. +- `IFieldReader` removed. +- `IParser.ByteCount` added. +- `IParser.CharCount` added. +- `IParser.Count` added. +- `IParser[int index]` added. +- `IParser.Record` added. +- `IParser.RawRecord` added. +- `IParser.Row` added. +- `IParser.RawRow` added. +- `IParser.Read` returns `bool` instead of `string[]`. +- `IParser.ReadAsync` returns `bool` instead of `string[]`. +- `IReader.Parser` removed. +- `int IReaderRow.ColumnCount` added. +- `int IReaderRow.CurrentIndex` added. +- `string[] IReaderRow.HeaderRecord` added. +- `IParser IReaderRow.Parser` added. +- `ISerializer` removed. +- `string[] IWriterRow.HeaderRecord` added. +- `int IWriterRow.Row` added. +- `int IWriterRow.Index` added. +- `RecordBuilder` removed. + +### 19.0.0 + +#### Features + +- Added the rest of the mapping and attributes configuration for constructor parameters. +- Reading speed improvement. + +#### Breaking Changes + +- Added `IParameterMapper` to `BooleanFalseValuesAttribute`, `BooleanTrueValuesAttribute`, `ConstantAttribute`, `CultureInfoAttribute`, `DateTimeStylesAttribute`, `DefaultAttribute`, `FormatAttribute`, `HeaderPrefixAttribute`, `IgnoreAttribute`, `NameIndexAttribute`, `NullValuesAttribute`, `NumberStylesAttribute`, `OptionalAttribute`, and `TypeConverterAttribute`. +- Renamed `MapTypeConverterOption` to `MemberMapTypeConverterOptions`. +- Renamed `TypeConverterOptions.NumberStyle` to `TypeConverterOptions.NumberStyles`. +- Removed `ReflectionHelper.CreateInstance<T>`. +- Removed `ReflectionHelper.CreateInstance`. +- Removed `ReflectionHelper.CreateInstanceWithoutContractResolver`. + +### 18.0.0 + +#### Features + +- Added parameter mapping via class map or attributes. + +#### Breaking Changes + +- `NameAttribute` added interface `IParameterMapper`. +- `IndexAttribute` added interface `IParameterMapper`. + +### 17.0.1 + +#### Bug Fixes + +- Fixed issue where EnumConverter wasn't working if enum value wasn't an Int32. + +### 17.0.0 + +#### Features + +- ValidateHeader will validate all members before calling HeaderValidated. + +#### Breaking Changes + +- `Action<bool, string[], int, ReadingContext> IReaderConfiguration.HeaderValidated` -> `Action<InvalidHeader[], ReadingContext> IReaderConfiguration.HeaderValidated` +- `Action<bool, string[], int, ReadingContext> CsvConfiguration.HeaderValidated` -> `Action<InvalidHeader[], ReadingContext> CsvConfiguration.HeaderValidated` +- `ConfigurationFunctions.HeaderValidated` signature changed from `(bool isValid, string[] headerNames, int headerNameIndex, ReadingContext context)` to `(InvalidHeader[] invalidHeaders, ReadingContext context)` +- `CsvReader.ValidateHeader(ClassMap map)` -> `CsvReader.ValidateHeader(ClassMap map, List<InvalidHeader> invalidHeaders)` +- Removed `HeaderValidationException.HeaderNames`. +- Removed `HeaderValidationException.HeaderNameIndex`. +- Added `InvalidHeader[] HeaderValidationException.InvalidHeaders`. + +### 16.2.0 + +#### Features + +- Added ability to put `[Name]` attribute on enum values. +- Added ability to register a converter for `Enum` that will be a default for all enum types. + +### 16.1.0 + +#### Features + +- GetRecords throws `ObjectDisposedException` when `CsvReader` is disposed. A message hint was added to help the user understand what went wrong. + +### 16.0.0 + +#### Features + +- Ability to have duplicate header names when using dynamic records. + +#### Breaking Changes + +- Added `Func<ReadingContext, int, string> IReaderConfiguration.GetDynamicPropertyName`. +- Added `Func<ReadingContext, int, string> CsvConfiguration.GetDynamicPropertyName`. + +### 15.0.10 + +- Fixed `IgnoreAttribute` to ignore the whole property treey if put on a reference property when auto mapped. + +### 15.0.9 + +#### Bug Fixes + +- Fixed issue where `CsvDataReader.FieldCount` was throwing an exception if there were no records. + +### 15.0.8 + +#### Bug Fixes + +- Fixed `CsvDataReader.GetOrdinal` issue where it wasn't doing a case-insensitive match after a failed case-sensitive match. Run values through `PrepareHeaderForMatch`. + +### 15.0.7 + +#### Bug Fixes + +- Fixed issue where writing `null` to `WriteField` didn't output a field. + +### 15.0.6 + +#### Bug Fixes + +- Fixed test not building. + +### 15.0.5 + +#### Bug Fixes + +- Fixed issue with multiple character delimiter not working when the first char of the delimiter precedes the actual delimiter. + +### 15.0.4 + +#### Bug Fixes + +- Fixed issue with `ReflectionHelper` caching not always unique. + +### 15.0.3 + +#### Bug Fixes + +- Updated default number styles for `DecimalConverter` and `DoubleConverter` to match MS's recommendations. + +### 15.0.2 + +#### Bug Fixes + +- Fixed issue with `DataReader.GetValues` not working when column and rows have different count. + +### 15.0.1 + +### Bug Fixes + +- Downgraded `System.Threading.Tasks.Extensions` to 4.5.2 due to loading error of `Microsoft.Bcl.AsyncInterfaces`. + +### 15.0.0 + +#### Features + +- Ignore attribute on a reference will ignore all properties on that reference. + +#### Breaking Changes + +- Added `IMemberReferenceMapper` to `IgnoreAttribute`. + +### 14.0.0 + +#### Features + +- Added `IAsyncDispose` on writing classes. + +#### Breaking Changes + +- Added dependency `<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.3" />` to `net45`. +- Added dependency `<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.3" />` to `net47`. +- Added dependency `<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.3" />` to `netstandard2.0`. +- `IWriter` added interface `IAsyncDisposable` for `net47` and `netstandard2.1`. +- `ISerializer` added interface `IAsyncDisposable` for `net47` and `netstandard2.1`. +- `WritingContext` added interface `IAsyncDisposable` for `net47` and `netstandard2.1`. +- `CsvWriter` added methods `public async ValueTask DisposeAsync()` and `protected virtual async ValueTask DisposeAsync(bool disposing)` for `net47` and `netstandard`. +- `CsvSerializer` added methods `public async ValueTask DisposeAsync()` and `protected virtual async ValueTask DisposeAsync(bool disposing)` for `net47` and `netstandard`. +- `WritingContext` added methods `public async ValueTask DisposeAsync()` and `protected virtual async ValueTask DisposeAsync(bool disposing)` for `net47` and `netstandard`. + +### 13.0.0 + +#### Features + +- Added `netstandard2.1` build. +- Added required CultureInfo parameter to any class that uses CultureInfo. +- Apply member attributes using interface instead of hard coding. +- Added customizable new line when writing. You can choose from `CRLF`, `CR`, `LF`, or `Environment.NewLine`. +- Renamed `Configuration` to `CsvConfiguration` to avoid namespace conflicts. +- Added `GetRecordsAsync` and `WriteRecordsAsync`. + +#### Breaking Changes + +- Removed dependency `<PackageReference Include="System.Reflection.TypeExtensions" Version="4.4.0" />` from `netstandard2.0`. +- Removed dependency `<PackageReference Include="System.Reflection.TypeExtensions" Version="4.4.0" />` from `netstandard2.1`. +- Added dependency `<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.1.0" />` to `net47`. +- Added dependency `<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.1.0" />` to `netstandard2.0`. +- `ClassMap.AutoMap()` -> `ClassMap.AutoMap(CultureInfo)` +- `CsvParser.CsvParser(TextReader)` -> `CsvParser.CsvParser(TextReader, CultureInfo)` +- `CsvParser.CsvParser(TextReader, bool)` -> `CsvParser.CsvParser(TextReader, CultureInfo, bool)` +- `CsvReader.CsvReader(TextReader)` -> `CsvReader.CsvReader(TextReader, CultureInfo)` +- `CsvReader.CsvReader(TextReader, bool)` -> `CsvReader.CsvReader(TextReader, CultureInfo, bool)` +- `CsvSerializer.CsvSerializer(TextWriter)` -> `CsvSerializer.CsvSerializer(TextWriter, CultureInfo)` +- `CsvSerializer.CsvSerializer(TextWriter, bool)` -> `CsvSerializer.CsvSerializer(TextWriter, CultureInfo, bool)` +- `CsvWriter.CsvWriter(TextWriter)` -> `CsvWriter.CsvWriter(TextWriter, CultureInfo)` +- `CsvWriter.CsvWriter(TextWriter, bool)` -> `CsvWriter.CsvWriter(TextWriter, CultureInfo, bool)` +- `Factory.CreateParser(TextReader)` -> `Factory.CreateParser(TextReader, CultureInfo)` +- `Factory.CreateReader(TextReader)` -> `Factory.CreateReader(TextReader, CultureInfo)` +- `Factory.CreateWriter(TextWriter)` -> `Factory.CreateWriter(TextWriter, CultureInfo)` +- `IFactory.CreateParser(TextReader)` -> `IFactory.CreateParser(TextReader, CultureInfo)` +- `IFactory.CreateReader(TextReader)` -> `IFactory.CreateReader(TextReader, CultureInfo)` +- `IFactory.CreateWriter(TextWriter)` -> `IFactory.CreateWriter(TextWriter, CultureInfo)` +- Added `ISerializerConfiguration.NewLine`. +- Added `ISerializerConfiguration.NewLineString`. +- Added `Configuration.NewLine`. +- Added `Configuration.NewLineString`. +- Removed `Configuration.Configuration()` parameterless constructor. +- Attributes now require the use of `IMemberMapper` or `IMemberReferenceMapper` to be loaded. All existing attributes added these and implemented the interface. +- Renamed `Configuration` to `CsvConfiguration`. +- Added `IAsyncEnumerable<T> CsvReader.GetRecordsAsync<T>()` +- Added `IAsyncEnumerable<T> CsvReader.GetRecordsAsync<T>(T anonymousTypeDefinition)` +- Added `IAsyncEnumerable<object> CsvReader.GetRecordsAsync(Type type)` +- Added `IAsyncEnumerable<T> CsvReader.EnumerateRecordsAsync<T>(T record)` +- Added `Task CsvWriter.WriteRecordsAsync(IEnumerable records)` +- Added `Task CsvWriter.WriteRecordsAsync<T>(IEnumerable<T> records)` +- Added `IAsyncEnumerable<T> IReader.GetRecordsAsync<T>()` +- Added `IAsyncEnumerable<T> IReader.GetRecordsAsync<T>(T anonymousTypeDefinition)` +- Added `IAsyncEnumerable<object> IReader.GetRecordsAsync(Type type)` +- Added `IAsyncEnumerable<T> IReader.EnumerateRecordsAsync<T>(T record)` +- Added `Task IWriter.WriteRecordsAsync(IEnumerable records)` +- Added `Task IWriter.WriteRecordsAsync<T>(IEnumerable<T> records)` + +### 12.3.2 + +#### Bug Fixes + +- Changed double and single converters to only test for format "R" if the user hasn't supplied a format. + +### 12.3.1 + +#### Bug Fixes + +- Fix for bug in .NET Framework that causes a StackOverflowException. This needs to be changed back eventually. + +### 12.3.0 + +#### Features + +- Added UriConverter. + +### 12.2.3 + +#### Big Fixes + +- Changed round trip default format to test if "R" works and use backup of "G9" for float and "G17" for double. + +### 12.2.2 + +#### Bug Fixes + +- Fixed issue where multiple properties with the same name were used when a child class property hides a parent class property using the new modifier. +- Fixed issue where a null reference exception was thrown when writing and all properties are ignored. + +### 12.2.1 + +#### Bug Fixes + +- Fixed issue where an "Index out of bounds of the array" exception was happening on TryGetField of type DateTime. +- Fix `RawRecord` adding spaces if `TrimOptions.Trim` is used. + +### 12.2.0 + +#### Features + +- Allow default value when using optional members. +- Added BigIntConverter. +- Mapping to member with type `Type` will throw exception by default. + +#### Bug Fixes + +- Made SingleConverter and DoubleConverter round-trip-able. + +### 12.1.3 + +#### Bug Fixes + +- Always write \r\n line endings to be compliant with RFC 4180. + +### 12.1.2 + +#### Bug Fixes + +- Fixed issue where CsvDataReader would skip the first row when there is no header record. +- Fixed CsvDataReader issue where null values weren't being represented as DBNull.Value on GetValue and GetValues methods. +- Fixed issue with IsDBNull method where an empty string was considered a null. + +### 12.1.1 + +#### Bug Fixes + +- Fixed issue where `CsvReader.ReadAsync` wasn't behaving the same as `CsvReader.Read`. + +### 12.1.0 + +#### Features + +- Added constructor to `Configuration` to pass in the `CultureInfo`. When passing a culture in, the `Delimiter` will be set to `CultureInfo.TextInfo.ListSeparator`. + +### 12.0.1 + +#### Bug Fixes + +- Fixed issue where writing a dynamic object would still sort the header when no sort was specified. + +### 12.0.0 + +#### Features + +- Added config option for sorting dynamic object properties when writing. Defaults to property value set order. + +#### Breaking Changes + +- Added `IComparer<string> IWriterConfiguration.DynamicPropertySort`. +- Added `IComparer<string> Configuration.DynamicPropertySort`. + +### 11.0.1 + +#### Bug Fixes + +- Fixed issue with leaveOpen not being used in the context's dispose. + +### 11.0.0 + +#### Features + +- Removed config options `QuoteAllFields`, `QuoteNoFields`, `QuoteRequiredChars`, and `BuildREquiredQuoteChars` in favor of `ShouldQuote` function. + +#### Breaking Changes + +- Removed `IWriterConfiguration.QuoteAllFields`. +- Removed `IWriterConfiguration.QuoteNoFields`. +- Removed `IWriterConfiguration.QuoteRequiredChars`. +- Removed `IWriterConfiguration.BuildRequiredQuoteChars`. +- Removed `Configuration.QuoteAllFields`. +- Removed `Configuration.QuoteNoFields`. +- Removed `Configuration.QuoteRequiredChars`. +- Removed `Configuration.BuildRequiredQuoteChars`. +- Added `Func<string, WritingContext, bool> IWriterConfiguration.ShouldQuote`. +- Added `Func<string, WritingContext, bool> Configuration.ShouldQuote`. + +### 10.0.0 + +#### Features + +- Added a more friendly header validation message. +- Separated header and field validation exceptions. +- Added data properties to validation classes. +- Changed Configuration.ReadingExceptionOccurred to not throw an exception and return a boolean whether it should throw an exception. The caller will throw if true. +- Changed `NamedIndexCache` type from `Tuple<string, int>` to `(string, int)`. +- Config option to consider a line break in a quoted field as bad data. +- Changed delimiter default value from ',' to CultureInfo.CurrentCulture.TextInfo.ListSeparator. +- PrepareHeaderForMatch now passes in the header name and index. +- Dynamic records will now have null properties for missing fields. +- Write ExpandoObject and IDynamicMetaObjectProvider object properties in ascending order to ensure order of property creation doesn't matter. +- Added escape character configuration. +- Added IDataReader implementation. This allows for easily loading a DataTable. + +### Breaking Changes + +- `ValidationException` is now `abstract`. +- `IReaderConfiguration.ReadingExceptionOccurred` type changed from `Action<CsvHelperException>` to `Func<CsvHelperException, bool>`. +- `Configuration.ReadingExceptionOccurred` type changed from `Action<CsvHelperException>` to `Func<CsvHelperException, bool>`. +- Changed `NamedIndexCache` type from `Tuple<string, int>` to `(string, int)`. This adds a dependency to `System.ValueTuple` on .NET 4.5. +- Added `bool IParserConfiguration.LineBreakInQuotedFieldIsBadData`. +- Added `bool Configuration.LineBreakInQuotedFieldIsBadData`. +- Changed `IReaderConfiguration.PrepareHeaderForMatch` type from `Func<string, string>` to `Func<string, int, string>`. +- Changed `Configuration.PrepareHeaderForMatch` type from `Func<string, string>` to `Func<string, int, string>`. +- Added `char ISerializerConfiguration.Escape`. +- Added `char IParserConfiguration.Escape`. +- Added `char Configuration.Escape`. + +### 9.2.3 + +#### Bug Fixes + +- Fixed issue where TrimOptions.InsideQuotes would fail when there were escaped quotes in the field. + +### 9.2.2 + +#### Bug Fixes + +- Fixed issue where NamedIndexes wasn't being reset on ReadHeader call. + +### 9.2.1 + +#### Bug Fixes + +- Fixed issue where a TypeConverterAttribute isn't being used when on a reference. + +### 9.2.0 + +#### Features + +- More clear exception messages when reading and a missing field is found. + +### 9.1.0 + +#### Features + +- Allow parameterless constructor on classes and reference property classes when auto mapping. + +### 9.0.2 + +#### Bug Fixes + +- Fixed issue where `WriteAsync` wasn't calling `SanitizeForInjection`. + +### 9.0.1 + +#### Bug Fixes + +- Fixed issue where `leaveOpen` parameter in `CsvParser` constructor was hard coded. +- Fixed issue where header validation was being ran on properties that only had an index mapped. + +### 9.0.0 + +This release contains changes from 8.3.0 and 8.2.0. + +### 8.3.0 + +This has been unlisted in nuget because of a breaking change before it. The changes are in 9.0.0. + +#### Features + +- Removed restriction that was disallowing the null char '\0' to be used as a delimiter. + +### 8.2.0 + +This has been unlisted in nuget because of a breaking change. The changes are in 9.0.0. + +#### Features + +- Added Optional config to factory builder. +- Added `OptionalAttribute`. + +#### Breaking Changes + +- Added `IHasMapOptions : IHasOptional`. +- Added `MemberMapBuilder : IHasOptional`. +- Added `MemberMapBuilder : IHasOptionalOptions`. + +### 8.1.1 + +#### Features + +- Configuration functions are available on a static class `ConfigurationFunctions`. + +#### Bug Fixes + +- Fixed issue where `IgnoreBlankLines` wasn't being checked in `GetField<T>(int index, ITypeConverter converter)`. + +### 8.1.0 + +#### Features + +- Added `IsOptional` mapping option. + +### 8.0.0 + +#### Features + +- Added Unity build. +- Added `IsOptional` mapping option. + +#### Bug Fixes + +- Added missing interface methods to configs. +- Fixed issue with parsing when only CR is used and fields are quoted. +- Fixed issue where `GetField` was calling the `ObjectResolver`. +- Made the contexts not serializable in exceptions. +- Fixed issue with `ObjectResolver` fallback causing a `StackOverflowException`. + +#### Breaking Changes + +- Added `IReaderConfiguration.IgnoreReferences`. +- Added `IWriterConfiguration.IgnoreReferences`. + +### 7.1.1 + +#### Bug Fixes + +- Added constructor to `CsvWriter` that allows for `leaveOpen` to be set. +- Made `CsvWriter.Dispos`e able to be called multiple times. +- Added `ConfigureAwait(false)` to all async calls. + +### 7.1.0 + +#### Features + +- Changed record object creation to use the `ObjectResolver`. + +### 7.0.1 + +#### Bug Fixes + +- Allow private constructors to be used to instantiate new class instances. + +### 7.0.0 + +#### Features + +- Reading performance improvements. + +#### Breaking Changes + +- Removed `IReadingContext` and `IWritingContext` interfaces. `ReadingContext` and `WritingContext` are used directly now. + +### 6.1.1 + +#### Bug Fixes + +- Fixed issue with circular references when auto mapping. + +### 6.1.0 + +#### Features + +- Dynamic now uses `Configuration.PrepareHeaderForMatch` on header name to get property name for dynamic object. + +### 6.0.3 + +#### Bug Fixes + +- Fixed issue with LINQPad not working properly due to types from differently assemblies being cached in the writer. + +#### Breaking Changes + +- `IWritingContext.TypeActions` signature changed. + +### 6.0.2 + +#### Bug Fixes + +- Fixed issue with LINQPad not working properly due to types from differently assemblies being cached. + +### 6.0.0 + +#### Features + +- Use `ObjectResolver` to create internal classes `RecordManager`, `ExpressionManager`, `RecordCreatorFactory`, and `RecordHydrator`, `RecordWriterFactory`. +- Added generic resolve method to object resolver. +- Added mapping methods to MemberMap for use during runtime mapping. +- Added more info and properties to TypeConverterException. + +#### Bug Fixes + +- Fixed issue where mapping an interface doesn't get used when writing. + +#### Breaking Changes + +- Added `IObjectResolver.Resolve<T>( params object[] constructorArgs )` method. +- Added `IWriter.WriteRecords<T>( IEnumerable<T> records )` method. +- `TypeConverterException` constructors signatures changed. + +### 5.0.0 + +#### Features + +- Added `Map<TClass>.References( expression )` back in. + +#### Bug Fixes + +- Fixed `DefaultTypeConverterException` message. The generated message wasn't being used. + +### 4.0.3 + +#### Bug Fixes + +- Added `ReadingExceptionOccurred` callback to `GetRecord` methods when an exception occurs. + +### 4.0.2 + +#### Bug Fixes + +- Fixed issue with parsing when buffer spans over a field. + +### 4.0.1 + +#### Bug Fixes + +- Fixed issue where trimming inside quotes would fail when the character after a space was a delimiter, \r, or \n. + +### 4.0.0 + +#### Breaking Changes + +- Added setter to `ISerializerConfiguration.Quote`. +- Removed `ClassMap<TClass>.References( expression, constructorArs )`. Use sub property mapping instead. +- Removed `ClassMap<TClass>.ConstructUsing( expression ). Use the `ObjectResolver` instead. +- Change how reference header prefixing works. + - Changed `Configuration`/`IReaderConfiguration`/`IWriterConfiguration` `bool PrefixReferenceHeaders` to `Func<Type, string, string> ReferenceHeaderPrefix`. The function takes in the member type and member name and returns the prefix. + - Removed `MemberReferenceMap.Prefix()` method. + - Removed `ParameterReferenceMap.Prefix()` method. +- Changed `Configuration`/`IReaderConfiguration`/`IWriterConfiguration` `ClassMap AutoMap<T>()` to `ClassMap<T> AutoMap<T>()` +- Changed `TypeConverterException` constructors parameter from `ReadingContext` to `IReadingContext`. + +### 3.4.0 + +#### Bug Fixes + +- Fixed issue when a map was created through auto mapping, you couldn't use sub property mapping to update a member. + +### 3.3.0 + +#### Features + +- Added more information to the `DefaultTypeConverter.ConvertFromString` not convertible exception. +- Reduced the number of `PrepareHeaderForMatch` calls. + +### 3.2.0 + +#### Features + +- Attribute mapping. It's back... + +### 3.1.1 + +#### Bug Fixes + +- Fixed issue where you weren't able to write `IEnumerable`. + +### 3.1.0 + +#### Features + +- Allow multiple headers to be written. + +#### Bug Fixes + +- Flush `CsvWriter` on `Dispose`. +- Made `ShouldSkipRecord` not called if the parser returns `null` for an end of stream. +- `ShouldUseConstructorParameters` returns `false` if there are no constructors. +- Header validation doesn't validate members where `ConvertUsing` or `Constant` are used. + +### 3.0.0 + +#### Features + +- netstandard2.0 +- Massive speed improvements to the `CsvParser`. +- Speed improvements to `CsvSerializer`. +- Map child properties so multiple mapping classes aren't needed. +- `ConvertUsing` implementation for writing. +- Read/write `IEnumerable` properties. +- Field mapping. +- Async reading/writing. +- Added `ClassMapBuilder` to build maps on the fly without a mapping class. +- Write `IDynamicMetaObjectProvider` objects. `DynamicObject` and `ExpandoObject` are the 2 most common. +- Allow `null` fields to be written. +- `IDictionary` type converters. +- Added trim options to trim in parser and removed trim from reader. +- Header validation. +- Field validation. +- Added `leaveOpen` flag to constructors to not dispose of underlying `TextReader` and `TextWriter`. +- Added properties to `CsvHelperException` and removed the string data. +- Speed up mappings that use `ConvertUsing` by caching the named indexes. +- Write comments. +- Map constants. +- Write fields that aren't mapped. +- Specify values that resolve to `null` when reading. +- Added CsvProperMap<T> to allow for compile time type checking on mappings. +- Read more than 1 header row. +- Changed reading exception callback to send a CsvHelperException. +- Map the same property more than once. +- Exposed the underlying TextReader as a property. +- Removed header matching manipulation configuration `IsHeaderCaseSensitive`, `IgnoreHeaderWhiteSpace`, and `TrimHeaders` and added a config for `PrepareHeaderForMatch` that is a function. Both the header field name and the property name are ran through this method before matching against each other. +- Added interfaces for configuration so you can tell what options are available in your current context. +- Moved detection of column count changes into the reader. The parser shouldn't care and should just return whatever data it finds. +- `ConstructUsing` works with reference maps. +- `ConstructUsing` can use initializers. +- Allow resuming reading of more data is written to the stream. +- Auto mapping with user defined `struct`. +- Ability to change required quote characters. +- Speed improvements when using `GetField`. +- Speed improvements when using `WriteField`. +- Allow mapping default value to be a string that is converted. +- Moved reading/writing state data into a common context object that is shared. +- Multiple `string` formats for `TypeConverterOptions`. +- Created object resolver so interfaces can be mapped to and IoC containers can be plugged in. +- Made methods `ReIndex` and `GetMaxIndex` on `CsvClassMap` `public`. +- Added a `Flush` method to the writer so `NextRecord` just writes a line ending. This will allow users to not write a line ending if they want. +- Removed statics to eliminate possible threading issues. +- Added `SerializableAttribute` to exception classes. It was removed previously because of netstandard1.x not having it available. +- Added `ByteArrayConverter`. +- Reading anonymous types. +- Auto mapping with any constructor. +- Changed `Property` naming to `Member` since both properties and fields are used. +- `TypeConverterFactory` is now instance of `Configuration` instead of a static. +- Changed `Configuration` flags to callbacks with default functionality to let the user change the functionality if they want. + +#### Bug Fixes + +- Fixed issue with `CsvClassMapCollection[type]` choosing the wrong type when multiple types on the inheritance tree are mapped. +- Fixed issue where setting `Configuration.ShouldSkipRecord` method always overrides the `Configuration.SkipEmptyRecords` setting. +- Fixed issue where ignoring header whitespace wouldn't work if a named property had the same whitespace in it. +- When comments are on and a field is being written that is the first field in the record and the first char is a comment char, quote the field because it's not a comment. +- Fixed issue with type converter options set in factory not working with auto mapping or explicit map. +- Fixed line ending spanning buffer issue. +- Fixed issue of skipping a character if a line ending was within a quoted field. +- Added locking to factory to make it thread safe. +- Fixed bug when mapping a constant then mapping another property after will throw an exception. +- Changed reflection calls to `ConvertToString` to get the method for `ITypeConverter` instead of the actual converter. This is so the overridden implementation will be used instead of a random method with the same name. +- Adding locking in `ReflectionHelper.CreateInstance` for the static delegate cache. +- Fixed quote handling issue of `IsFieldBad` by marking unquoted fields with quote chars as bad only when `Configuration.IgnoreQuotes` is `false`. +- Fixed issue with automapping not mapping references correctly in some nested situations because it thought it was a circular dependency when it wasn't. +- Fixed issue with private properties not being able to be set. +- Fixed issue with getting the class map from the collection. It was only getting the current and not looking up the tree. +- Fixed issue with `Constant` not working with `null`. + +#### Breaking Changes + +- Removed all .NET builds except for net45 and netstandard2.0. +- Removed obsolete code. + - `object ICsvReader.GetField( int index, ITypeConverter converter )` + - `object ICsvReader.GetField( string name, ITypeConverter converter )` + - `object ICsvReader.GetField( string name, int index, ITypeConverter converter )` + - `void ICsvWriter.WriteField( Type type, object field )` + - `void ICsvWriter.WriteField( Type type, object field, ITypeConverter converter )` + - `void ICsvWriter.WriteRecord( Type type, object record )` +- Moved methods that aren't row level out of `ICsvReaderRow` and into `ICsvReader`. + - `IEnumerable<T> GetRecords<T>()` + - `IEnumerable<object> GetRecords( Type type )` + - `void ClearRecordCache<T>()` + - `void ClearRecordCache( Type type )` + - `void ClearRecordCache()` +- Removed `CanConvertTo` and `CanConvertFrom` from the type converters because there is no need for them. +- Added properties to `CsvHelperException` and removed the string data. +- Changed `WriteRecord` to not call `NextRecord`. +- Changed config setting name from `IgnorePrivateAccessor` to `IncludePrivateProperties` to be more clear on intention. +- Changed reading exception callback to send a `CsvHelperException`. +- Removed configuration `IsHeaderCaseSensitive`, `IgnoreHeaderWhiteSpace`, and `TrimHeaders` and added `PrepareHeaderForMatch`. +- Changed `DateTime` and `DateTimeOffset` converters to not work when the `string` is spaces to match what all the other converters do. The .NET Framework `DateTime` and `DateTimeOffset` converters will convert a `string` of all spaces into `MinValue`, so we are diverging from that a little. +- Changed `ReadHeader` to not set `CurrentRecord` to `null`. +- Removed Excel specific code. This will go into a separate library. The malformed fallback behavior that mimics Excel still exists. +- Moved reading/writing state data into a common context object that is shared. +- Changed `BadDataCallback` to take in a `ReadingContext` instead of a `string`. +- Removed `Csv` prefix from all classes except `CsvReader`, `CsvParser`, `CsvWriter`, and `CsvSerializer`. +- Removed default `null` values since there is no common standard that could be found. +- Removed default `boolean` values of `yes`, `y`, `no`, `n` since it's not a standard boolean. `true`, `false`, `1`, `0` still work. +- Changed default delimiter to `,` instead of ListSeparator. +- Added a `Flush` method to the writer. +- Changed `Property` naming to `Member`. +- Removed `Configuration`s `ThrowOnBadData`, `IgnoreReadingExceptions`, `SkipEmptyRecords`, and `WillThrowOnMissingField` in favor of function callbacks. +- Renamed + - `TypeConverterFactory` to `TypeConverterCache` + - `TypeConverterOptionsFactory` to `TypeConverterOptionsCache` + - `Configuration.HeaderValidatedCallback` to `Configuration.HeaderValidated` + - `Configuration.MissingFieldFoundCallback` to `Configuration.MissingFieldFound` + - `Configuration.ReadingExceptionCallback` to `Configuration.ReadingExceptionOccurred` + - `Configuration.BadDataFoundCallback` to `Configuration.BadDataFound` + - `ICsvParser` to `IParser` + - `FieldReader` to `CsvFieldReader` + - `ICsvReader` to `IReader` + - `ICsvReaderRow` to `IReaderRow` + - `ICsvSerializer` to `ISerializer` + - `ICsvWriter` to `IWriter` + - `ICsvWriterRow` to `IWriterRow` + +### 2.16.3 + +#### Bug Fixes + +- Fixed issue with `CsvClassMapCollection[type]` choosing the wrong type when multiple types on the inheritance tree are mapped. + +### 2.16.2 + +#### Bug Fixes + +- Made `TypeInfo` compatibility stuff internal to not cause conflicts. + +### 2.16.1 + +#### Bug Fixes + +- Fix for UWP release not working. + +### 2.16 + +#### Features + +- Added `CsvReader.ReadHeader` so headers can be read without reading the first row. + +### 2.15.0.2 + +#### Features + +- Update to .NET Core 1.0 release. + +### 2.15 + +#### Features + +- Added `SerializableAttribute` to all exceptions. + +### 2.14.3 + +#### Features + +- Updated project to .NET Core RC2. + +#### Bug Fixes + +- Fixed issue with assembly not being a release build. + +### 2.14.2 + +#### Bug Fixes + +- Added net45 build and excluded it from CoreFX compatibility. + +### 2.14.1 + +#### Bug Fixes + +- Fixed issue with .NET 2.0 classes being included that shouldn't have been in .NET 4.0. + +### 2.14 + +#### Features + +- Added CoreCLR support. + +### 2.13.5 + +#### Bug Fixes + +- Fixed `ShouldSkipRecord` not working on rows before header. + +### 2.13.3 + +#### Bug Fixes + +- Fixed issue where the number of delimiter characters was read when a multiple character delimiter is hit. This was causing non-delimiters to be read when just the first character of the delimiter was found. + +### 2.13.2 + +#### Bug Fixes + +- Fixed issue with `TryGetField` with named index returning wrong value. + +### 2.13.1 + +#### Bug Fixes + +- Added missing `DateTimeConverter` to the list of default converters. + +### 2.13 + +#### Features + +- When writing, use empty values for properties on reference properties when flag `UseNewObjectForNullReferenceProperties` is off. + +#### Bug Fixes + +- Fixed portable target for Windows Phone 8.1. + +### 2.12 + +#### Features + +- Added Windows Phone 8.1 support to the PCL assembly. +- Added ability to set a prefix for reference maps. i.e. `Prefix( string prefix = null)` +- Added callback to use to determine if a record should be skipped when reading. +- Excel leading zeros number formatting. This allows you to read and write numbers that will preserve the zeros on the front. i.e. `="0001"` +- Use default value when a field is null because of a missing field in the row. +- Added `TrimFields` to CsvWriter. +- ability to specify constructor arguments when referencing another map within a mapping. +- Added `Names` property on `CsvPropertyNameCollection` to get raw list of property names. +- Added raw file line number to parser. +- Mapping methods on `CsvClassMap<T>` are now public to more easily allow mapping during runtime. +- Added `DateTimeOffset` converter. + +#### Bug Fixes + +- Fixed exception that was occurring when fields were empty and `UseExcelLeadingZerosFormatForNumerics = true`. +- Excel compatibility fix. If a field starts with a quote but never ends and the end of the file is reached, the field would be null. The field will now contain everything. +- Don't get static properties when automapping. +- Made all exceptions thrown contain Exception.Data["CsvHelper"]. +- Fixed missing support writing the double quotes for inner quotes on a quoted field. This used to be there and was removed at some point. A unit test is now in place so this doesn't happen again. + +### 2.11.1.1 + +#### Bug Fixes + +- Fixed issue with writing an array of records. + +### 2.11 + +#### Features + +- Allow preservation of numeric strings for Excel. + +#### Bug Fixes + +- Fixed writing issue with anonymous objects outputting wrong headers. + +### 2.10 + +#### Features + +- Updated writer methods to match reader methods. + +### 2.9.1 + +#### Bug Fixes + +- Fixed issue where char converter would trim a single space string. + +### 2.9 + +#### Features + +- Added support to ignore whitespace when determining a record is empty. + +### 2.8.4 + +#### Bug Fixes + +- Fixed breaking change to not break. + +### 2.8.3 + +#### Bug Fixes + +- Fixed issue where header wasn't written when there were no records in the IEnumerable on WriteRecords( IEnumerable ). + +### 2.8.2 + +#### Bug Fixes + +- Fixed issue where an exception was always thrown if Configuration.ThrowOnBadData is on. + +### 2.8 + +#### Features + +- Added configurations for a callback when a bad field is detected. Added configuration to throw an exception when a bad field is detected. +- Made mapping with interfaces not duplicate property maps. + +### 2.7.1 + +#### Bug Fixes + +- Fixed issue with mappings overwriting an explicitly set index when re-indexing. +- Auto mapping will ignore Enumerable properties instead of throwing an exception. Exceptions will still be thrown if an Enumerable is used outside of auto mapping. + +### 2.7 + +#### Bug Fixes + +- Fixed issue where using dynamic proxy objects would always automap instead of using a registered class map. +- Fixed issue when trimming fields and the field is null. +- Fixed issue when writing a field and the value is null. +- Removed deprecated writer methods. + +### 2.6.1 + +#### Features + +- PCL implementation. .NET 4.0+, Silveright 4.0+, WP7 7.5+, Windows 8 +- Excel separator record reading and writing. +- Writer speed enhancements. Thanks to thecontrarycat. + +#### Bug Fixes + +- Fixed issue with mapping order when no index is specified. + +### 2.6 + +#### Features + +- Added config to prefix headers of reference properties with the parent property name when automapping. +- Ability to ignore blank lines. When this config option is set to false, the parser will return and array of nulls. You can differentiate between a row with commas this way. The reader will behave the same way as a blank record. + +#### Bug Fixes + +- Fixed issue when writing and a reference map type is a struct. + +### 2.5 + +#### Features + +- Global type converter options. +- Easier access to property maps to allow for changing maps on the fly. +- Option to ignore references when auto mapping. +- AutoMap functionality is available in class maps. +- Mappings can be specified in the constructor of the mapping class. Overriding CreateMap is now deprecated. + +#### Bug Fixes + +- Updated ConvertUsing to not cause the exception "Operation Could Destabilize the Runtime" when property is a nullable type and a non-nullable type is returned. + +### 2.4.1 + +#### Bug Fixes + +- Fixed issue where parsing would add delimiter chars to the field when the buffer ran out in the middle of the delimiter. + +### 2.4 + +#### Features + +- Split writing up into a writer and serializer so the writer can write other things besides CSV files. + +#### Bug Fixes + +- Fixed issue where a NullReferenceException was thrown when using reference maps and a reference was null. +- Fixed issue where TryGetField was throwing MissingFieldException. +- Fixed issue where a commented row on the last line that doesn't have a newline will return the commented row. +- Fixed NuGet package for WP8. +- Added missing WriteHeader methods to ICsvWriter that were a part of CsvWriter. + +### 2.3 + +#### Features + +- Support for TimeSpan. +- Support for writing records of type dynamic. The dynamic objects do not work with collections, which means ExpandoObject doesn't currently work. + +#### Bug Fixes + +- Fixed issue with extra exception info not being added when the reading exception callback is used. +- Fixed issue where having only reference maps throws exception. + +### 2.2.2 + +#### Bug Fixes + +- Fixed issue with parser where a line wouldn't end if the previous char was a \0. + +### 2.2.1 + +#### Bug Fixes + +- Fixed issue with trimming fields not working under one path. +2.2.0 + +#### Features + +- Added Row property to ICsvReader. +- Config option to trim headers and values when reading. + +### 2.1.1 + +#### Bug Fixes + +- Fixed issue when WillThrowOnMissingField is off and exception was still being thrown. + +### 2.1.0 + +#### Features + +- Made RegisterClassMap overload with CsvClassMap instance public. + +### 2.0.1 + +#### Bug Fixes + +- Made a WinRT Any CPU build and removed the arch specific WinRT builds. + +### 2.0.0 + +#### Features + +- Added parser configuration to ignoring quotes and treating them like any other character. +- Added CsvFactory to create ICsvParser, ICsvReader, and ICsvWriter classes. This is useful when you need to unit test code that uses CsvHelper since these 3 classes require a TextReader or TextWriter to work. +- All assembly versions are strong named but will use a single version of 2.0.0.0. The file version and NuGet versions will change with every release. +- Removed class type constraint from reading and writing. +- Added non-generic class mapping overload. +- WriteRecords param changed from IEnumerable<object> to non-generic IEnumerable. +- Value types can be read and written instead of just custom classes. +- Indexes are automatically set and incremented when mapping in order of the Map and Reference calls. +- Auto mapping with circular reference detection. +- Config option to ignore spaces in header names. +- Fixed exception handling. Exception are no longer wrapped. Exception.Data["CsvHelper"] contains CsvHelper specific exception info. +- Row exception can be skipped during GetRecords. +- Renamed IsStrictMode to WillThrowOnMissingField. +- Window Phone 7 & 8 builds. +- Auto mapping will use defined maps if available. +- Type converter options. +- Added IEnumerable converter that throws an exception so people will know that converting to/from and enumerable is not supported instead of getting a cryptic error message. +- Dynamic support for reading and writing. +- Multiple maps can be supplied. +- Renamed InvalidateRecordCache to ClearRecordCache. +- Recursive reference mapping down the whole mapping tree. +- Configuration.CultureInfo was added in place of Configuration.UseInvariantCulture. + +#### Bug Fixes + +- Getting the exception helper message failed when writing because no parser is available. +- WriteRecords Dynamic invoke had wrong parameter count. +- GetField( string ) was not returning null if the header is not found. +- CsvBadDataException when there were extra columns in the row. +- Raw record corruption. + +### 1.17.0 + +#### Features + +- Ignore properties that can't be set in attribute mapping. +- Made TypeConverterFactory thread safe. +- Added remove converter method. + +#### Bug Fixes + +- Issue with writer exception in WinRT. + +### 1.16.0 + +#### Features + +- Change TypeConverterFactory to use a set of cache type converters so global type converters can be used. +- Added GetField<T, TConverter> overloads. +- Changed all Activator.CreateInstance calls to use compiled expression trees to create them instead. +- Changed mapping for ConvertUsing to accept a Func so a block expression can be used. + +### 1.15.0 + +#### Features + +- Support for Silverlight 4 & 5. + +#### Bug Fixes + +- Issue where writing with Configuration.QuoteAllFields enabled will not quote the quotes inside the field. +- Issue with WinRT not building after pull request merge. + +### 1.14.0 + +#### Features + +- Parse full line on read. This allows for the parser to retain the whole unchanged raw CSV lin on a read. +- Changed delimiter config from a char to a string. +- Iterating records multiple times will throw a CsvReaderException. This is to help stop confusion when 0 results are returned the second iteration. + +#### Bug Fixes + +- Issue where EnumConverter isn't created correctly from the TypeConverterFactory. +- Issue with updating count for all closing quotes. + +### 1.13.0 + +#### Features + +- Configuration to always not quote all fields. +- WriteHeader method is public. +- Added enum converter. + +#### Bug Fixes + +- Issue with boolean converter returning true for "no" value. +- Issue with GetMethod in WinRT. + +### 1.12.1 + +#### Bug Fixes + +- Issue where an exception was being thrown when reading all records multiple times. + +### 1.12.0 + +#### Features + +- WinRT support. + +### 1.11.0 + +#### Features + +- Better exception information added to CsvBadDataException. + +### 1.10.0 + +#### Features + +- Mapping property for CreateUsing which allows user to specify how the property gets created. + +### 1.9.2 + +#### Bug Fixes + +- Issue with skipping empty records. + +### 1.9.1 + +#### Bug Fixes + +- Issue with detecting column count changes. + +### 1.9.0 + +#### Features + +- Added properties to CsvReaderException to give more information about the error. +- Ability to skip empty records based on config settings. +- Getting by index that doesn't exist will give a default or CsvMissingFieldException. +- Made column count detection a config setting. +- Map option for constructing the row object. +- Throw exception when inconsistent column lengths are detected. +- String.Format support in CsvWriter. +- Excel compatible parsing. +- Parser can keep track of the byte position using an encoding so a user can seek to a stream and start reading from there. + +#### Bug Fixes + +- Fixed bug with column count detection. +- Issue with double counting the closing quote. +- Issue where parsing was incorrect when the last row didn't have a CRLF at the end. +- Issue with error messages. + +### 1.8.0 + +#### Features + +- Writer overload for shouldQuote when writing a field. +- Ability for using alternative names for headers in the configuration. +- Better error messages. + +### 1.7.0 + +#### Features + +- Configuration to quote all fields when writing. +- Parser keeps a char count of where it's at. + +#### Bug Fixes + +- Fixed subclass issue by having the reader and writer use interfaces instead of concrete classes. + +### 1.6.0 + +#### Features + +- Custom boolean type converter that can convert from 1 and 0 besides the normal conversion. +- Property map configuration to set a default value. +- CsvWriter no longer flushes to the output stream after every record. +- Non-generic overloads for reading, writing, and attribute mapping. +- Invalidate record cache will clear the properties list. + +### 1.5.0 + +#### Features + +- Support .NET 2.0 and 3.5 builds. + +### 1.4.0 + +#### Features + +- Case insensitive header matching. + +### 1.3.0 + +#### Features + +- Removed CsvHelper class. +- Property reference mapping. One level deep. + +### 1.2.0 + +#### Features + +- Support for multiple duplicate header names. + +### 1.1.2 + +#### Bug Fixes + +- Issue when using a readonly or writeonly stream and disposing causes an exception. + +### 1.1.1 + +#### Features + +- Updated CsvHelper.cs to allow for readonly and writeonly stream. + +#### Bug Fixes + +- Fixed DateTimeConverter issue where a white space string would return a - DateTime.MinValue instead of null. + +### 1.1.0 + +#### Features + +- Changed .NET 3.5 project to client profile. +- Added getter for the current record in the header. + +### 1.0.0 + +#### Features + +- Changed strict mode to default to true. +- Renamed strict mode configuration property. +- Changed reader to not throw an exception when there are duplicate header records unless in strict mode. + +#### Bug Fixes + +- Fixed bug where if there is no line ending at the end of the file, the last field would be null instead of an empty string. +- Fixed configuration references and constructor signatures. + +### 0.16.0 + +#### Features + +- Added configuration option for using CultureInvariant to read/write. +- Updated the reader/writer to use the config option. +- Both CsvReader and CsvWriter are using Local culture when converting from/to strings. +- CsvClassMap without generic argument. + +### 0.15.0 + +#### Features + +- Changed TryGetField<T> to do a low level check instead of jsut wrapping in try/catch blocks. +- Removed non generic TryGetField methods. +- Formatting changes. +- Changed CsvParser to use the Configuration.Comment char instead of #. + +#### Bug Fixes + +- Fixed indentation error caused by new constructor in CsvPropertyMap. + +### 0.14.0 + +#### Features + +- Changed GetRecords<T> to return IEnumerable<T>. +- Added convenience constructor to CsvPropertyMap. +- Major configuration overhaul. +- Changed end of file check to be more low level. +- Final record is returned if there is a trailing delimiter. +- Added an exception re-throw to parsing that tells the line and character number. +- Added ability to change what the quote char is. +- Added CSV specific exceptions. + +#### Bug Fixes + +- Fix for issue when CsvHelper uses CurrentCulture instead of InvariantCulture. + +### 0.13.0 + +#### Features + +- Changed StreamReader to TextReader to be more generic. + +### 0.12.0 + +#### Features + +- Added option to have a commented out line using '#' as the first character of the line. + +#### Bug Fixes + +- Fixed issue with spaces in non-quoted field. |