c# – 在项目设置中保存DateTimeOffset设置时失去精度

当我在项目设置中保存DateTimeOffest时,我失去了一些精度:

第一个变量是序列化之前的原始值.
第二个是反序列化后的值.

实际上我的变量在配置文件中是这样序列化的:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <userSettings>
        <MyApp.Properties.Settings>
            [...]
            <setting name="LatestCheckTimestamp" serializeAs="String">
                <value>02/22/2013 14:39:06 +00:00</value>
            </setting>
            [...]
        </MyApp.Properties.Settings>
    </userSettings>
</configuration>

有没有办法指定一些序列化参数来提高精度?

我知道我可以使用一些解决方法,例如存储Ticks和偏移值或类似的东西,但我想知道是否有更好的方法.

编辑:
更多信息:我使用标准的Visual Studio项目设置来存储我的值:

MyApp.Settings.Default.LatestCheckTimestamp = initialLatestCheckTimestamp;
MyApp.Settings.Default.Save();

MyApp.Settings是Visual Studio在项目属性页面中编辑设置时生成的类.

编辑2:解决方案:

根据马特约翰逊的回答,这就是我所做的:

>将设置从LatestCheckTimestamp重命名为LatestCheckTimestampString,但不在我的代码中
>在独立文件中添加以下Wrapper以完成部分类设置:

.

public DateTimeOffset LatestCheckTimestamp
{
    get { return DateTimeOffset.Parse(LatestCheckTimestampString); }
    set { LatestCheckTimestampString = value.ToString("o"); }
}

新的配置文件现在看起来像:

<configuration>
    <userSettings>
        <MyApp.Properties.Settings>
            [...]
            <setting name="LatestCheckTimestampString" serializeAs="String">
                <value>2013-02-22T16:54:04.3647473+00:00</value>
            </setting>
        </MyApp.Properties.Settings>
    </userSettings>
</configuration>

……我的代码仍然是

MyApp.Settings.Default.LatestCheckTimestamp = initialLatestCheckTimestamp;
MyApp.Settings.Default.Save();

最佳答案 序列化DateTimeOffset的最可靠方法是使用
RoundTrip pattern,它使用“o”标准序列化字符串指定.

这使用ISO8601标准,该标准与其他系统,语言,框架等高度互操作.您的值将如下所示:2013-02-22T14:39:06.0000000 00:00.

.Net将使用此格式将小数秒存储为7位小数.

如果您可以显示一些存储和检索应用程序设置的代码,我可以告诉您在何处指定格式字符串.在大多数情况下,它只是.ToString(“o”).

点赞