c# 如何使用 YamlDotNet 序列化 DateTime 以便反序列化?

c# How to serialize DateTime using YamlDotNet so that it can be deserialized?

在 .net Framework 4.8 中,我试图通过 YamlDotNet 序列化一个包含 DateTime 字段的对象,该字段通常通过 DateTime.Now 调用创建。 我为该对象使用自定义序列化程序,使用以下内容作为键的值进行序列化。这会产生一个有效的 yaml, 我可以反序列化。

session.StartTime.ToString(CultureInfo.InvariantCulture)

生成的 Yaml:

StartTime: 03/27/2020 18:59:27

反序列化时我得到一个 DateTime 具有相同年月日时秒的对象,但刻度似乎不同

637209323680070971 - 上原

637209323680000000 - 在反序列化的那一个:

我怎样才能 serialize/deserialize 使两个对象相同?

我不需要额外刻度提供的准确性,但不知道如何删除它们或解决此错误的正确方法是什么

如果您不关心毫秒数,则无需执行任何操作,因为被解析的值等于您在 YAML 中写入的值。

如果需要毫秒,可以使用roundtrip format"o":

session.StartTime.ToString("o", CultureInfo.InvariantCulture)

默认情况下,YamlDotNet 将使用 Convert.ChangeType 来解析日期,并且该方法接受该格式等。