在 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。
有没有办法 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。