当我在项目设置中保存一个
第一个变量是序列化前的原始值。
第二个变量是反序列化后的值。
实际上,在配置文件中我的变量被序列化为:
新的配置文件现在看起来像这样:
DateTimeOffest
时,我会失去一些精度:
![Losing precision on DateTimeOffset serialization](https://istack.dev59.com/ltNCw.webp)
实际上,在配置文件中我的变量被序列化为:
<?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: 解决方案:
根据Matt Johnson的答案,我所做的如下:
- 将设置从
LatestCheckTimestamp
重命名为LatestCheckTimestampString
,但不是在我的代码中 - 添加以下包装器到一个独立文件中,完成部分类
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();