Лучшие практики для сериализации объектов к формату пользовательской строки для использования в выходном файле

В дополнение к этим ответам я счел полезным рассмотреть следующие 2 момента:

Возможно, потребуется применить схему аутентификации:

[http]
    # https://github.com/git/git/blob/master/Documentation/config.txt
    proxyAuthMethod = anyauth|basic|digest|negotiate|ntlm

Также, как правило, со схемой аутентификации NTLM, может потребоваться предоставить явно домен AD.

В git bash:

echo %userdomain%

И соответственно обновите http.proxy:

git config --global http.proxy http://DOMAIN\\proxyuser:proxypwd@proxy.server.com:8080

В любом случае, расследованию может помочь добавление журналов CURL:

export GIT_CURL_VERBOSE=1
29
задан Chris McCall 24 July 2009 в 19:49
поделиться

2 ответа

Вот общая мода на создание CSV из списка объектов с использованием отражения:

public static string ToCsv<T>(string separator, IEnumerable<T> objectlist)
{
    Type t = typeof(T);
    FieldInfo[] fields = t.GetFields();

    string header = String.Join(separator, fields.Select(f => f.Name).ToArray());

    StringBuilder csvdata = new StringBuilder();
    csvdata.AppendLine(header);

    foreach (var o in objectlist) 
        csvdata.AppendLine(ToCsvFields(separator, fields, o));

    return csvdata.ToString();
}

public static string ToCsvFields(string separator, FieldInfo[] fields, object o)
{
    StringBuilder linie = new StringBuilder();

    foreach (var f in fields)
    {
        if (linie.Length > 0)
            linie.Append(separator);

        var x = f.GetValue(o);

        if (x != null)
            linie.Append(x.ToString());
    }

    return linie.ToString();
}

Можно сделать множество вариантов, например, записывать непосредственно в файл в ToCsv(), или заменить строковый конструктор на IEnumerable и yield statements.

67
ответ дан 28 November 2019 в 00:37
поделиться

В качестве практического правила я рекомендую только переопределение toString как инструмента для отладки, если это для бизнес-логики, это должен быть явный метод класса / интерфейса.

Для простой сериализации, подобной этой Я бы посоветовал создать отдельный класс, который знает о вашей выходной библиотеке CSV и ваших бизнес-объектах, которые выполняют сериализацию, а не проталкивают сериализацию в сами бизнес-объекты.

Таким образом, вы получите класс для каждого выходного формата, который производит представление вашей модели.

Для более сложной сериализации, когда вы пытаетесь написать граф объектов для сохранения, я бы подумал о том, чтобы поместить его в бизнес-классы, но только если это сделает код более чистым.

8
ответ дан 28 November 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: