次のメソッドを使用してオブジェクトのディープクローンを作成しようとしています。DataContract属性と.netのSerializable属性の違い
public static T DeepClone<T>(this T target)
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, target);
stream.Position = 0;
return (T)formatter.Deserialize(stream);
}
}
このメソッドには、シリアライズされたオブジェクト、つまり「シリアライズ可能」という属性を持つクラスのオブジェクトが必要です。私はそれに属性 "DataContract"を持っているクラスを持っていますが、メソッドはこの属性で動作していません。私は "DataContract"もシリアライザの一種だと思うが、おそらく "シリアライザブル"のそれとは異なる。
誰にでも2つの違いを教えてください。また、 "DataContract"属性と "Serializable"属性の両方の作業を行う属性が1つだけのオブジェクトのディープクローンを作成することが可能かどうか、あるいは恐らくディープクローンを作成する別の方法を教えてください。
助けてください!
応答@Odedをありがとう。ここでは1つの質問だけ。このクラスはWCFサービスで使用されています。サービスのサービスリファレンスを追加して、私の消費者プロジェクトでこのサービスを利用しています。サービスに変更があるたびに、サービス参照を更新する必要があります。両方の属性を使用してサービスを更新すると、.netはService ReferenceのReference.csクラスに同じ名前の2つのプロパティを作成します。 1つは "DataMember"と "Serializable"属性です。これによりビルドエラーが発生します。これを回避する方法はありますか? – samar
@samar - 私が知る限り、 'DataContract'が使われると' Serializable'は無視されます。私はあなたが持っている問題について聞いたことがありません。 – Oded