4

プロジェクト設定にを保存するDateTimeOffestと、精度が低下します。 DateTimeOffsetシリアル化の精度が失われます

最初の変数は、シリアル化前の元の値です。2つ目は、逆シリアル化後の値です。

実際、私の変数は設定ファイルで次のようにシリアル化されています:

<?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プロジェクトのプロパティページで設定を編集するときにVisualStudioによって生成されるクラスです。

編集2:解決策

マットジョンソンの答えに基づいて、これは私がしたことです:

  1. 設定の名前をからに変更しましたが、コードにはLatestCheckTimestamp変更してLatestCheckTimestampStringいません
  2. 部分クラスを完了するために、独立したファイルに次のラッパーを追加しました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();
4

1 に答える 1

3

aをシリアル化する最も信頼できる方法は、標準のシリアル化文字列で指定されるDateTimeOffsetRoundTripパターンを使用することです。"o"

これは、他のシステム、言語、フレームワークなどと高度に相互運用可能な ISO86012013-02-22T14:39:06.0000000+00:00標準を使用します。値は次のようになります。

.Netは、この形式で小数秒から小数点以下7桁までを格納します。

アプリの設定を保存および取得する方法のコードを表示できれば、フォーマット文字列を指定する場所を表示できます。ほとんどの場合、その単純な.ToString("o")

于 2013-02-22T16:11:57.577 に答える