シリアル化/逆シリアル化の手法をいつ使用すべきかは私にはわかりません
誰かが私にいくつかの基本的なユースケースシナリオを提供できますか?
シリアル化は、オブジェクトをある種のエンコードされた表現に変換して、ある場所から別の場所に移動するプロセスです。通常、これはオブジェクトをバイト配列やXML文字列などに変換するプロセスですが、必要に応じて他の形式にシリアル化することもできます。
シリアル化の最も一般的な使用法は、プロセス、マシン、より正確にはAppDomainの境界を越えてオブジェクトを移動する必要がある場合です。したがって、サーバーAからサーバーBにオブジェクトを送信する場合は、サーバーAでオブジェクトをシリアル化してから、オブジェクトのエンコードされた表現をサーバーBに送信し、サーバーBでオブジェクトを逆シリアル化して使用する必要があります。もう一方の端にあります。
すべてのオブジェクトを簡単にシリアル化できるわけではありません。たとえば、サーバー上のある場所へのポインタがメモリ内にあるオブジェクトは、ポインタが別のサーバーに送信された場合、おそらく意味がありません。このような場合、そのポインタをどう処理するかを決定するために、独自のカスタムロジックを作成する必要があります。おそらく、オブジェクトのそのプロパティをまったくシリアル化しないでしょう...おそらく、ポインタが指すオブジェクトもシリアル化するでしょう-それはあなた次第です。そのため、シリアル化は必ずしも簡単または自動ではありません。
明らかな例のいくつかは、プロセスの境界を越えてクラスのインスタンスを転送する必要がある場合(たとえば、WCFまたはその他のリモート通信テクノロジを使用する場合)、またはインスタンスをストリーム(ファイルなど)に永続化する場合です。
シリアル化は、シリアル化された状態のオブジェクトのインスタンスを表す技術であり、いつでもオブジェクトタイプに再作成できます。2つの単純なユースケースは、単にオブジェクトをファイルに書き込み、それらを書き留めることですStream
(ネットワーク通信、プロセス間通信などの場合)。
たとえば、次のような単純なDTOを転送する場合:
public class TestDto
{
public string TestText { get; set; }
public string MoreText { get; set; }
}
..を追加し、の[Serializable]
ようなものを使用して、.BinaryFormatter
のもう一方の端を読み取ることができるようにしますNetworkStream
。
Stream
デフォルトでは、オブジェクトインスタンスを任意の形式またはファイルに単純に記述して、反対側にそのまま残すことはできません。もちろん、これを支援するライブラリ(WCFなど)があり、[Serializable]
内部で(クラスの)変換を行います。
(なぜwpfを使用しているのかわかりませんが、シリアル化はWPFに固有のものではありません)