在 FileHelpers 中保留只读属性的值

persist values from read-only properties in FileHelpers

有没有办法 FileHelpers 存储任何只读 属性?

我以为会有一个使用FileHelpers 字段属性的解决方案,但这样的属性似乎不存在。 (恰好相反的一个名为 FieldHidden 的属性存在)。

情况(代码)如下

[DelimitedRecord(";")]
public class MigrationFlags
{
    public const string HostUrlTemplate = "{HostUrl}";
    public MigrationFlags()
    {
    }

    [FieldHidden]
    public string Url { get; set; }

    [FieldCaption("RelativeUrl " + HostUrlTemplate)]
    public string RelativeUrl => UriExt.GetRelativeUrl(this.Url);

这里我需要加上RelativeUrl。

在我看来也在 Url 属性 上使用转换器,但是是否可以使用不同的解决方案,我可以从现有的 属性 命名中受益相对Url?

除了指定 CSV 文件的格式外,我不建议将 FileHelpers class 用于任何其他用途。 class 代表该文件中的一条记录。将 MigrationFlags class 的语法视为一种描述 FileHelpers 可以自动读写的记录的巧妙方法。

如果您需要添加 any 进一步的逻辑,它应该在您根据需要映射 to/from 的单独 class 中。这将关注点分开 - MigrationFlags 定义 CSV 记录。

[DelimitedRecord(";")]
public class MigrationFlags
{   
    // Extremely simple class.
    // Only the fields in the CSV
    // No logic. Nothing clever.
    public string RelativeUrl { get; set;};
}

public class MigrationClass
{   
    // A normal C# class with:
    //   constructors
    //   properties
    //   methods
    //   readonly, if you like
    //   inheritance, overrides, if you like
    // etc.

    public string Url { get; set; }
    public string RelativeUrl => UriExt.GetRelativeUrl(this.Url);
}

然后导出,类似:

public void Export(IEnumerable<MigrationClass> items, string filename)
{ 
    var migrationFlags = items.Select(
        x => new MigrationFlags() 
           { 
             RelativeUrl = x.RelativeUrl,
             // etc.
           });

    var engine = new FileHelperEngine<MigrationFlags>();
    engine.WriteFile(filename, migrationFlags);
}

有关详细信息,请参阅 this answer