5

少し背景を説明します。

ユーザーが設定を保存し、後日設定を呼び出すことができるアプリケーションを作成しました。これを行うために、いくつかのシリアル化可能なオブジェクトを作成しました。BinaryFormatterを使用してこれを問題なく動作させることができました。

問題が発生し始めるのは、ソフトウェアをアップグレードして新しい設定を追加するときです。シリアル化可能なオブジェクトが一致しないため、ファイルを更新する必要があります。私はいくつかのバージョンでこれを成功させました。しかし、これを行うために、ファイルを逆シリアル化してみて、例外がスローされた場合は、次のバージョンで試してみます。。。そして次。。。そして次。。。私が正しいものを見つけるまで。次に、古いバージョンごとに変換関数を記述して、最新バージョンに変換する必要があります。「リビジョン」ファイルも作成したので、バージョンを確認してアップグレードするだけですが、それでも多くの異なる「バージョン」を維持し、それらすべての変換関数を作成する必要があります。 。。。これは私には本質的に厄介なようであり、私がこのルートを続けた場合、後で膨満する傾向があります。

これを行うにはもっと良い方法が必要ですが、どうすればよいかわかりません。

ありがとう

4

6 に答える 6

3

アセンブリを解決するには、シリアル化バインダーを作成する必要があります。

設定については、を使用しDictionary<string, byte[]>てファイルに保存します。私は辞書をシリアライズし、すべて順調です。新しい設定を追加するとき、設定ファイルに見つからない場合はデフォルト設定を提供します。

また、シリアル化されたオブジェクトにフィールドを追加する場合は、[オプション] で装飾できます。

于 2013-02-19T22:00:27.663 に答える
2

これはまさに Settings クラスの目的です。app.config でデフォルト値を定義すると、ユーザーはそれらを変更できます。保存すると、変更内容がユーザー プロファイル内の場所に保存されます。それらを読むと、変更された設定が得られます。

このリンクは VS 2005 用ですが、VS 2012 でもまったく同じように機能します: http://msdn.microsoft.com/en-us/library/aa730869(v=vs.80).aspx

VS2012 のリンクを見つけました: http://msdn.microsoft.com/EN-US/library/k4s6c3a0(v=VS.110,d=hv.2).aspx

于 2013-02-19T22:49:58.937 に答える
0

バイナリを実行している場合は、ProtoBuf-Net http://code.google.com/p/protobuf-net/wiki/GettingStartedを参照してください。これらはすべて、バージョン管理などに関してカバーされているためです。また、非常にコンパクトです。また、積極的に開発されており、.protoファイルを使用する場合、クロスプラットフォームの要件がある可能性がある場合は、それを達成することもできます。

(プログラムの外部で)設定を編集できるようにしたい場合は、XML*シリアル化メソッドを使用できます。

于 2013-02-19T23:03:26.253 に答える
0

他の人が提案したようにフィールドに名前を付けることに加えて、この種のことは単にバージョン番号を求めて叫びます。

于 2013-02-19T22:46:00.677 に答える
0

実際には[DefaultValue()]、設定オブジェクトの新しいプロパティに属性を追加することでこれを行うことができます - 少なくとも XML シリアライゼーションの場合。バイナリシリアル化を使用してこれを試みたことはありません。xml の場合、これは「オプション」であり、古いバージョンのファイルをロードしてもシリアル化が中断されないことを意味します。この属性は、System.ComponentModel名前空間で見つけることができます。

class MySettings
{
    public int MaxNumLogins { get; set; }

    // specify the value to default to if it's not present in the serialized file...
    [DefaultValue(0)]
    public int CacheTimeoutMinutes { get; set; }
}
于 2013-02-19T22:08:48.427 に答える