2009-06-23 10 views
1

私は現在、自動生成されたWebサービスクラスのディープコピーを作成するためにシリアル化を使用しています。これを行うためのよりクリーンな方法ですか?クラスは自動生成されるので、私はそれらに触れたくありません。詳細:自動生成されたWebServiceクラスを詳細にコピーするクリーナーの方法

(正常に動作します)私の現在、コードはこれです:

using (Stream stream = new MemoryStream()) //Copy IR 
{ 
    IFormatter IF = new BinaryFormatter(); 
    IF.Serialize(stream, IR); 
    stream.Seek(0, SeekOrigin.Begin); 
    IR2 = (ObjectType)IF.Deserialize(stream); 
} 

コードが自動的に生成されたクラスをコピーするために使用されています。 soapリクエストにWeb参照を追加すると、Visual Studio 2005によって自動的にこのクラスが生成されます。クラスは次のようになります。

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3074")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(Namespace=/*"[WebServiceNameSpace]"*/)] 
public partial class ObjectType { 

    private string AField;   
    private string BField; 
    //... 
    public string A { 
     get { 
      return this.AField; 
     } 
     set { 
      this.AField = value; 
     } 
    } 

    /// <remarks/> 
    public string B { 
     get { 
      return this.BField; 
     } 
     set { 
      this.BField = value; 
     } 
    } 
    //... 
} 

答えて

2

深いクローニングは苦しいです。クラスがシリアライゼーションをサポートしている場合、それは最も良い(=最も信頼できる)オプションです。それ以外はロットです。

実際には、タイプによってxmlのシリアル化がサポートされるため、ここでの自然選択はXmlSerializerとなります。

解決したい問題がありますか?パフォーマンス?

+0

いいえ、私は解決しようとしている問題はありません。よりクリーンな方法があるかどうかを確認しようとしているだけです。私は特にそうではないことに驚くことではないが、私は尋ねると思った。 (私は、そのシリアライゼーションコードを別の汎用関数に移動するのは簡単だろうと思っていますが、それは何もよりクリーンではありません。) – Brian

関連する問題