Modo più pulito per copiare in profondità una classe di servizio Web generata automaticamente

StackOverflow https://stackoverflow.com/questions/1034118

Domanda

Attualmente sto utilizzando la serializzazione per fare copie approfondite di alcune classi di servizi Web autogenerate. È un modo più pulito per farlo? Le lezioni sono autogenerate, quindi non voglio toccarle. Maggiori dettagli:

Il mio codice attuale (che funziona bene) è questo:

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);
}

Il codice viene utilizzato per copiare una classe generata automaticamente. Quando ho aggiunto un riferimento web a una richiesta soap, Visual Studio 2005 ha generato automaticamente questa classe, tra gli altri. Le classi hanno un aspetto simile al seguente:

/// <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;
        }
    }
    //...
}
È stato utile?

Soluzione

La clonazione profonda è dolorosa. Se le classi supportano la serializzazione, questa è l'opzione migliore (= più affidabile). Qualsiasi altra cosa è un sacco di lavoro.

In realtà, poiché i tipi supportano la serializzazione xml, la scelta naturale qui sarebbe XmlSerializer .

C'è un problema che vuoi risolvere? Prestazioni?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top