簡體   English   中英

CsvHelper映射常數

[英]CsvHelper Map Constant Value

我對.NET的CsvMapper有疑問。 我正在使用類映射器將對象映射到這樣的csv文件中:

Map(x => x.ProductId).Name("ProductId");

這工作正常,但如何將常量值寫入聲明的列中呢? 在每一行中都應為該靜態值。

我試過了

Map(x => "constant value").Name("Constant Value Column")

但會引發異常“非成員訪問”

我需要這樣做,因為必須將csv文件上載才能導入到另一個需要已定義列結構的系統。

提前致謝!

Map用於通過名稱或索引將現有的CSV列映射到您的班級成員。 由於這似乎是您要添加的值,因此它不會存在於CSV中,並且應被映射Ignored 該值將由您的班級設置:

class SampleItem
{
    public string Name { get; set; }
    public string Descr { get; set; }
    public int Group { get; set; }
    public int Value { get; set; }
    public decimal Price { get; set; }
    public DateTime ItemDate { get; set; }
    public bool Active { get; set; }
    public string ConstVal { get; set; }

    public SampleItem()
    {
        ConstVal = "Ziggy";
    }

    public class SampleItemMap : CsvHelper.Configuration.CsvClassMap<SampleItem>
    {
        public SampleItemMap()
        {
            AutoMap();
            Map( m => m.ConstVal).Ignore();
        }
    }
}

由於CSV列與屬性的順序相同,因此可以使用AutoMap ConstVal屬性被Ignored因為它起源於類。

List<SampleItem> sList = new List<SampleItem>();

using (StreamReader sr = new StreamReader(@"C:\Temp\sample.csv", false))
using (CsvReader csv = new CsvReader(sr))
{
    csv.Configuration.Delimiter = ",";
    csv.Configuration.HasHeaderRecord = true;
    csv.Configuration.RegisterClassMap<SampleItem.SampleItemMap>();

    sList = csv.GetRecords<SampleItem>().ToList();
    dgv2.DataSource = sList;
}

在此處輸入圖片說明

我知道這是一個老問題,可能您已經找到了解決方案,我正在為即將到來的搜索者發布此答案。

您可能只是使用下面的行在輸出的csv文件上映射一個常量值

Map().Index(10).Constant("your constant value");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM