2


1

C#でシリアル化可能なクラスを実装するための好ましい方法は何ですか

C#でオブジェクトをシリアル化するさまざまな方法を見てきましたが、どの方法をいつ使用するかはわかりません。

現在の状況では、WCFを介して露出のためにシリアル化を行っているため、[DataContract]属性を使用する方法を推測しています。

現在、私はいくつかのXMLを読んでいて、結果のオブジェクトをWCFで公開しています。 したがって、元のクラスにアクセスできないXMLを逆シリアル化しています(したがって、クラスを再構築し、どの方法でもシリアル化を実装できます)。 次に、WCF用にシリアル化できる必要があります。

しかし、[DataContract]がこの場合に適している場合、なぜISerializableまたは[Serializable]属性の代わりに常に使用しないのでしょうか?

そのため、この問題に使用する2つの質問のうちの1つと、シリアル化する方法が異なるのはなぜですか。

2 Answer


2


DataContractは、基本的なシリアル化を開始するのに適した場所です。 ただし、オブジェクトのシリアル化方法を正確に制御する場合は、ISerializableインターフェイスを使用します。 また、データコントラクト属性は継承されませんが、ISerializableは継承されます

ISerializableは、.net 1.1以降で使用されています。 DataContractは、ほとんどの場合、シリアル化を簡素化するために.net 3.0で導入されました。


2


ISerializableを使用し、GetObjectDataを実装することにより、シリアライザーを作成せずにオブジェクトのクラス内でオブジェクトをシリアル化/逆シリアル化する方法をカスタマイズできます。

WCFサービスを作成する場合、DataContractに固執する必要があると思います。 その大きな利点の1つは、オプトイン(つまり、 悪い驚きはありません)メカニズム。