使用 YamlDotNet 反序列化 YAML 时如何指定日期区域设置?

How do I specify the date locale when Dserializing YAML using YamlDotNet?

在 YAML 文档中,我有一个使用 EN-GB 区域设置格式化的日期(所以 07/02/2019 是 2019 年 2 月 2 日)

当我使用 YamlDotNet 反序列化文档时,它将此解释为 EN-US 日期,因此将其存储为 2019 年 7 月 2 日

# Date in test.yaml:
date: 07/02/2019

# Code to deserialize document to object:
var myObject= new DeserializerBuilder()
                .WithNamingConvention(CamelCaseNamingConvention.Instance)
                .Build()
                .Deserialize<MyObject>(File.ReadAllText(args[0]));

有什么方法可以指定在使用 DeserializerBuilder 时应转换日期时应使用 locate 吗?

我怀疑您需要将 Culture 显式设置为线程:

CultureInfo newCulture = CultureInfo.CreateSpecificCulture("en-GB");
Thread.CurrentThread.CurrentUICulture = newCulture;
// Maybe this one below isn't necessary...
Thread.CurrentThread.CurrentCulture = newCulture;

原来我需要包含对 WithTypeConverter() 的调用并明确指定日期格式。

此代码有效:

new DeserializerBuilder()
   .WithNamingConvention(CamelCaseNamingConvention.Instance)
   .WithTypeConverter(new DateTimeConverter(
       provider: CultureInfo.CurrentCulture, 
       formats: new[] { "dd/MM/yyyy", "dd/MM/yyyy hh:mm" })
   ) 
   .Build()
   .Deserialize<MyObject>(File.ReadAllText(args[0]));