сохранить значения из свойств только для чтения в FileHelpers - PullRequest
0 голосов
/ 10 октября 2018

Есть ли способ, которым 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, но возможно ли использовать другое решение, в котором я могу извлечь выгоду из уже существующего свойства с именем RelativeUrl?

1 Ответ

0 голосов
/ 11 октября 2018

Я не рекомендую использовать класс FileHelpers для чего-либо, кроме указания формата файла CSV.Класс представляет одну запись в этом файле.Считайте синтаксис вашего MigrationFlags класса умным способом описания записи, которую FileHelpers может читать и записывать автоматически.

Если вам нужно добавить любую дополнительную логику, он долженбыть в отдельном классе, который вы отображаете в / из по мере необходимости.Это разделяет проблемы - 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);
}

См. этот ответ для получения дополнительной информации.

...