Запись только выбранных столбцов в CSV-файл с помощью CsvHelper

У меня есть небольшая программа, которая извлекает данные из веб-службы. Программа принимает ответ JSON, отображает его в POCO и записывает объекты в файл CSV (автоматическое отображение). Он отлично работает, когда я запрашиваю "все" данные в наборе данных, однако, если я запрашиваю ресурс (через OData) следующим образом: "$select EmpNo, FirstName, LastName", средство записи CSV по-прежнему будет писать все столбцы в заголовок CSV, например, "EmpNo, FirstName, LastName, Street, Address, City, Age" и т. д. и просто вставьте 0 (если int), false(если boolean) или "" (если строка) в столбцы, которые не имеют данные.

Веб-сервис корректно возвращает только указанные столбцы, поэтому проблема не в этом. Я использую CsvHelper для отображения объектов и CSV-записи. (Но я готов использовать все, что может решить мою проблему)

Я бы хотел записать только "EmpNo, FirstName, LastName" и данные столбцов в CSV-файл, если это то, что я запрашиваю в запросе OData.

Есть хорошие идеи для решения этой проблемы?

1 ответ

Трудно сказать, не зная точного кода, который вы используете. Но я предполагаю, что когда вы пишете свой список объектов, вы используете модель, в которой есть дополнительные поля, которые все пусты, потому что вы не запрашивали их через odata.

Если вы хотите только подмножество с CsvHelper, вы, вероятно, хотите указать CsvClassMap<T> и это отобразит вашу существующую модель только в те поля, которые вы хотите

Здесь есть много примеров CsvClassMap: http://joshclose.github.io/CsvHelper/

Метод write, скорее всего, будет перегружен методом, который примет карту классов.

Вы можете создать ClassMapper и указать, какие свойства из объекта вы хотите написать (и как вы хотите их записать!)
https://joshclose.github.io/CsvHelper/examples/configuration/class-maps/mapping-properties

Затем, когда вы пойдете писать, просто укажите ClassMapper

using (var writer = new StreamWriter("path\\to\\file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.Configuration.RegisterClassMap<NameOfClassMapper>();
    csv.WriteRecords(records);
}
Другие вопросы по тегам