使用 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]));
在 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]));