C#でのシリアル化されたオブジェクトの保存と保守


8

C#でシリアル化されたオブジェクトを格納および維持するためのベストプラクティスは何ですか?適用できる戦略やパターンはありますか?

私がこれまで信じてきたのはこれです:

  • スペースと速度の両方の点でXMLよりもJsonを優先しますが、大きなデータセットの場合、XMLはLINQ to XMLを介してデータをクエリ/マイニングする方が簡単です。
  • すべてのプロパティについて、シリアル化された名前に明示的にマップします。将来、プロパティの名前を変更する必要がある場合、シリアル化されたデータは壊れません。属性はこれに役立ちます。
  • 将来データを大量に移行する必要がある場合に備えて、シリアル化されたオブジェクトにある種のバージョン情報を保存します

更新:(難しい方法を見つけた)

  • アプリケーション全体およびすべてのバージョンで、すべての日時を統一された方法で保存します。フォーマットとタイムゾーンの両方について。

これらのシリアル化されたデータに対してどのような操作が行われますか?読み取り/書き込みのみか、より複雑なものですか?
陶酔

もっと一般的な質問ですが、私の場合、更新されるかどうかに関係なく、小さな設定オブジェクトを保存する必要があります。
ミハリスバゴス2012

2
4.ルールを破ることが理にかなうまで、ルールに従います。
ロバートハーベイ

1
どういう意味ですか?この場合の「ルール」とは何ですか?
ミハリスバゴス

回答:


9

私は何年にもわたってかなりのシリアライゼーションを行ってきました。ここに私たちが思いついたいくつかのものがあります:

  • バイナリ形式よりも人間が読める形式を優先します。バージョンをアップグレードする必要があるときに主にXsltを使用してXmlを変換できるので、主にJsonよりもXmlを好みます。

  • シリアル化する対象が何であれ、逆シリアル化ロジックとデータストレージは、シリアル化されたデータのバージョン管理を可能にする必要があります。バージョン情報はおそらくシリアライズされたデータの外にあるべきであり、正しいデシリアライゼーション戦略を取得して選択することを少し簡単にします。

  • シリアライゼーションでは、両方の方法でユニットテストを実行する必要があります。IE、データをデシリアライズし、すべてが正しくインポートされることを確認するテストが必要です。そして、データをシリアル化して、正しいjsonとxmlとして出力されることを確認する必要があります。

  • 上記のシリアル化のポイントがクロスプラットフォームである場合は、他のプラットフォームに対してテストします。おそらく、プラットフォームが成熟したほど問題は多くありませんが、jsonのフォーマット方法について合意が得られない場合がありました。


4

言及されたポイントは実用的であり、覚えておくと良いです。アプリケーションのニーズに応じて検討すると役立つ、さまざまな種類のシリアル化について説明します。

  • バイナリシリアライゼーション-バイナリエンコーディングを使用してstoragesocket-based network ストリームなどの用途でコンパクトなシリアライゼーションを生成します。
  • XMLシリアル化 -オブジェクトのパブリックフィールドとプロパティ、またはメソッドのパラメーターと戻り値を、特定のXMLスキーマ定義言語(XSD)ドキュメントに準拠するXMLストリームにシリアル化します。詳細については、System.Xml.Serialization名前空間をご覧ください。
  • SOAPシリアライゼーション-これはXMLシリアライゼーションの別のフレーバーであり、SOAP仕様に準拠する XMLストリームにオブジェクトをシリアライズするために使用できますSOAPはXMLに基づくプロトコルであり、XMLを使用してプロシージャコールを転送するために特別に設計されています。通常のXMLシリアル化と同様に、属性を使用して、XML Webサービスによって生成されるリテラルスタイルのSOAPメッセージを制御できます。

公式ソースからの詳細情報-MSDN C#プログラミング

また、これらすべてはSDLCプロセス内のプラクティスである必要があります(テストする環境、バージョン管理などがあることを意味します)


なぜバイナリまたは石鹸として保存するのですか?私が理解している限り、石鹸はデータの破損を回避するために過大​​に消費されています。これは、既知のシステムに保存する際に問題にならないものです。
ミハリスバゴス2012

1
それは速度についてであり、最速はバイナリシリアル化です。
ユスボフ

BinaryFormatterは、変更に対する耐性が最も低いオプションでもあります。私たちはそれと無限の苦労をしてきました、そして今私たちはそれを決して使用しないことを望みます。参照:stackoverflow.com/a/703361/505697
HappyCat

確かに、すべてに固有の問題があり、どこで使用されるかによって異なります。言及されているように、クロスプラットフォームの互換性のために、これは理想的なオプションではありません。これがXMLシリアル化が段階を踏む場所です。
Yusubov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.