2

クラスのインスタンスをファイル/データベースに保存する最良の方法は何ですか?

Command と呼ばれる基本クラスと派生クラスのロードがあります。ユーザーは、これらのクラスを構成できるグラフィカル デザイナーにコマンドを追加して、これらのクラスのインスタンスを作成します。(プロパティを設定します)。

次に、情報を失うことなくこれらの「コマンド」をファイルに保存する方法が必要です。

1 つのアイデアは db4o を使用することでしたが、GPL ライセンスはこのプロジェクトには受け入れられません。

提案やコードサンプルはありますか?

アップデート:

(私の質問を「ぼやけさせる」ために:p)

生成されたコードは次のようになります。

    command[i++] = new DelayInSecondsCommand(2);
    command[i++] = new DaliRequestCommand(1, false, 254);
    command[i++] = new DaliRequestCommand(2, false, 254);
    command[i++] = new DaliRequestCommand(3, false, 254);
    command[i++] = new WaitInSecondsCommand(2);             
    command[i++] = new DaliRequestCommand(1, false, 0);
    command[i++] = new DaliRequestCommand(2, false, 0);
    command[i++] = new DaliRequestCommand(3, false, 0);
    command[i++] = new JumpCommand(0);

しかし、その後、さまざまなコマンドが大量に発生します。

以前に使用したことはありませんが、.NET シリアライゼーションで可能であることは知っていますが、db4o はいいようですが、ライセンスがプロジェクトに合わないと言ったように、より良い代替手段があるかどうか疑問に思っていました。

更新 2:

返信ありがとうございます。おそらく今はシリアライゼーション ソリューションを使用しますが、他のオプションも検討します。参考までに、データは SQL Compact データベースに保存されます。

4

6 に答える 6

4

データをテーブルに保存しようとしていますか? またはブロブ/クロブデータとして?ファイルについて言及しているので、後者を想定しています。標準の.NETシリアライザーはどれでも問題ありません。それらはすべて継承などをサポートしていますDataContractSerializerBinaryFormatterXmlSerializer

protobuf-netなどのより難解なものを検討することもできます。

では、標準のシリアライザーで動作しないために何をする必要があるのでしょうか?

于 2008-12-10T12:03:28.543 に答える
3

シリアル化はトリックを行います!シリアライゼーションとは、オブジェクトまたはオブジェクトの接続グラフを (オブジェクトの現在の状態を保持するために) バイト ストリームに変換することです。これは、バイナリ ストリーム、XML などです。.Net はシリアル化を強力にサポートしているため、この変換を自分で行う必要はありません。オブジェクトをシリアル化したら、このデータをファイルまたはデータベースに自由に保存できます。同様に、シリアル化されたオブジェクトを表すバイト ストリームは、元のオブジェクトと同じ状態のオブジェクトに逆シリアル化できます。

ところで: シリアル化されたバイト ストリームを取得したら、圧縮や暗号化などの機能をさらに適用できます。

于 2008-12-10T11:52:07.927 に答える
2

シリアル化は、このタイプのデータを保存する優れた方法です。http://blog.paranoidferret.com/index.php/2008/06/20/csharp-tutorial-xml-serialization/を参照してください。

于 2008-12-10T11:59:43.683 に答える
2

かなりあいまいな質問ですが、.NET の組み込みのシリアル化機能 (XmlSerializer など) を使用しないのはなぜですか。

于 2008-12-10T11:26:39.130 に答える
2

http://www.neodatis.orgがあります。その LGPL ですが、私が使用したときは Java の実装しかありませんでした。現在、C# の「ベータ」リリースがありますが、テストはしていません。

于 2008-12-10T11:42:57.070 に答える
2

db40 も商用ライセンスを提供していますが、最近 versant によって購入されたので、それを参照することをお勧めします。この種のデータベースはオブジェクト指向データベースとして知られており、テーブルを使用して動作するリレーショナル データベースとは大きく異なるクラスの永続的なインスタンスを作成する方法です。

これ(wikpedia.org) は、オブジェクト指向データベースに関する優れた読み物であり、これ(ウィキペディアも) は、利用可能なオプションのいくつかのリストです。

私の意見では、オブジェクト データベースはリレーショナル データベースよりもはるかに優れており、強力であり、本当に必要な場合にのみ mysql などのリレーショナル データベースを使用します (それほど頻繁ではありません)。

これらのビデオを見て、試用版をダウンロードすることをお勧めします。

于 2008-12-10T11:45:32.087 に答える