Когда я сохраняю 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>
Есть ли способ указать некоторые параметры сериализации для повышения точности?
Я знаю, что могу использовать какой-то обходной путь, например, сохраняя тики и значение смещения или что-то в этом роде, но я хотел бы знать, нет ли лучшего способа.
EDIT: дополнительная информация: я использую стандартные настройки проекта Visual Studio для хранения своего значения:
MyApp.Settings.Default.LatestCheckTimestamp = initialLatestCheckTimestamp;
MyApp.Settings.Default.Save();
MyApp.Settings
— это класс, созданный Visual Studio при редактировании настроек на странице свойств проекта.
EDIT 2: Решение:
Основываясь на ответе Мэтта Джонсона, я сделал следующее:
- Параметр переименован с
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();