从 YAML 文件中读取设置。在设置中有 InitialDateTime。
就我而言,它设置为 09/07/2020 09:00:00。
系统减去日期为 7 月 9 日,矿场需要告知 YamlDotNet 现在是 9 月 7 日。
告诉我如何让她清楚日期写为 day.month.year。
程序.cs
using System;
namespace YamlDotNet_stackoverflow_Example
{
class Program
{
static void Main(string[] args)
{
var settings = Settings.GetFromYamlFile("Settings.yaml");
settings.SaveToYamlFile("Settings_output.yaml");
Console.WriteLine($"{settings.InitialDateTime:U}");
}
}
}
设置.cs
using System;
using System.Globalization;
using System.IO;
using YamlDotNet.Serialization;
namespace YamlDotNet_stackoverflow_Example
{
/// <summary>
/// Настройки расчета солвера
/// </summary>
public class Settings
{
/// <summary>
/// Начальная дата-время
/// </summary>
public DateTime InitialDateTime { get; set; }
/// <summary>
/// Чтение настроек из yaml-файла
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static Settings GetFromYamlFile(string fileName)
{
//CreateYamlFile(fileName);
var deserializer = new DeserializerBuilder()
.IgnoreUnmatchedProperties().Build();
using var file = new StreamReader(fileName);
var res = deserializer.Deserialize<Settings>(file);
return res;
}
/// <summary>
/// Сохранение настроек в yaml-файл
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public void SaveToYamlFile(string fileName)
{
var builder = new SerializerBuilder();
builder = builder.EmitDefaults(); // Для принудительной сериализации 0-вых значений
var serializer = builder.Build();
using var file = new StreamWriter(fileName);
serializer.Serialize(file, this);
file.Flush();
}
/// <summary>
/// Генератор для трафарета yaml-файла настроек при изменении структуры класса настроек
/// </summary>
/// <param name="fileName"></param>
private static void CreateYamlFile(string fileName)
{
var builder = new SerializerBuilder();
builder.EmitDefaults(); // Для принудительной сериализации 0 значений
var serializer = builder.Build();
var settings = new Settings
{
InitialDateTime = new DateTime(2020, 9, 7, 9, 0, 0)
};
using var file = new StreamWriter(fileName);
serializer.Serialize(file, settings);
file.Flush();
}
}
}
设置.yaml
InitialDateTime: 07.09.2020 9:00:00
示例数据和代码:https ://github.com/Dejsving/YamlDotNet-stackoverflow-Example
您需要使用WithTypeConverter方法将DateTimeConverter转换器添加到序列化程序。
在转换器中,您可以设置提供者(在上面的示例中,这是俄语文化
new CultureInfo("ru-RU"))和格式:您可以指定多种格式,第一个成功的将起作用。
文档自定义日期和时间格式字符串。
您可以结合提供者和格式。
可选地打开命名空间:
注意:该方法
EmitDefaults已弃用。您可能正在使用旧版本的库。我建议你升级。情报告诉我将其替换为
ConfigureDefaultValuesHandling: