--- lang: ja-jp breaks: true --- # CsvHelper で 項目名とプロパティ名が異なる場合のマッピング 2022-11-18 ```csharp= public class OrdersRecordClassMap: ClassMap<OrdersRecord> { public OrdersRecordClassMap() : base() { Map(m => m.Name )./* Index(0). */ Name("Name"); Map(m => m.Email)./* Index(1). */ Name("Email"); } } ``` ```csharp= private async IAsyncEnumerable<T> GetCsvRecordAsync<T, TMap>( StorageFile csvFile, Encoding? enc = null, bool? detectEncodingFromByteOrderMarks = null ) where TMap : ClassMap { // .NET Core では、「Encoding.RegisterProvider」を呼び出す必要がある。 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); if (enc == null) { enc = Encoding.UTF8; } if (detectEncodingFromByteOrderMarks == null) { detectEncodingFromByteOrderMarks = true; } using ( var reader = new StreamReader( csvFile.Path, enc, detectEncodingFromByteOrderMarks.Value ) ) { var configuration = new CsvConfiguration( CultureInfo.CurrentCulture ); configuration.Encoding = enc; configuration.HasHeaderRecord = true; configuration.IncludePrivateMembers = true; using (CsvReader csv = new CsvReader(reader, configuration)) { if (typeof(TMap) != typeof(ClassMap)) { csv.Context.RegisterClassMap<TMap>(); } await foreach (T record in csv.GetRecordsAsync<T>() .ConfigureAwait(false) ) { yield return record; } } } } ``` ###### tags: `CsvHelper` `ClassMap`