当我在我的项目设置中保存 aDateTimeOffest
时,我失去了一些精度:
第一个变量是序列化之前的原始值。第二个是反序列化后的值。
事实上,我的变量在配置文件中是这样序列化的:
<?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>
有没有办法指定一些序列化参数来提高精度?
我知道我可以使用一些解决方法,例如通过存储刻度和偏移值或类似的东西,但我想知道是否没有更好的方法。
编辑:更多信息:我使用标准的 Visual Studio 项目设置来存储我的值:
MyApp.Settings.Default.LatestCheckTimestamp = initialLatestCheckTimestamp;
MyApp.Settings.Default.Save();
MyApp.Settings
是 Visual Studio 在项目属性页中编辑设置时生成的类。
编辑2:解决方案:
根据马特约翰逊的回答,这就是我所做的:
- 将设置重命名为
LatestCheckTimestamp
toLatestCheckTimestampString
但不在我的代码中 - 在独立文件中添加了以下 Wrapper 以完成部分类
Settings
:
.
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();