1

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

私の現在のコード(正常に動作します)は次のとおりです。

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;
        }
    }
    //...
}
4

1 に答える 1

2

ディープクローニングは苦痛です。クラスがシリアル化をサポートしている場合、それが最良の (= 最も信頼できる) オプションです。それ以外はたいへんな作業です。

実際には、型は xml シリアル化をサポートしているため、ここでの自然な選択はXmlSerializer.

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

于 2009-06-23T18:06:52.270 に答える