2009-06-23 7 views
1

Ich verwende derzeit Serialisierung, um tiefe Kopien einiger automatisch generierter Webservice-Klasse zu erstellen. Ist ein sauberer Weg, dies zu tun? Die Klassen werden automatisch generiert, daher möchte ich sie nicht anfassen. Weitere Einzelheiten:Sauberere Möglichkeit, eine AutoGenerated WebService-Klasse tief zu kopieren

Mein aktueller, Code (der gut arbeitet) ist dies:

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

Der verwendete Code wird eine automatisch generierte Klasse zu kopieren. Wenn ich einer Soap-Anfrage eine Webreferenz hinzugefügt habe, hat Visual Studio 2005 diese Klasse unter anderem automatisch generiert. Die Klassen sehen in etwa so aus:

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

Antwort

2

Tiefes Klonen ist schmerzhaft. Wenn die Klassen die Serialisierung unterstützen, ist das die beste (= zuverlässigste) Option. Alles andere ist Lose der Arbeit.

Eigentlich, da die Typen XML-Serialisierung unterstützen, wäre die natürliche Wahl hier XmlSerializer.

Gibt es ein Problem, das Sie lösen möchten? Performance?

+0

Nein, es gibt kein Problem, das ich versuche zu lösen. Ich versuche nur zu sehen, ob es einen saubereren Weg gibt, es zu tun. Ich bin nicht besonders überrascht, dass es nicht, aber dachte, ich würde fragen. (Mir ist klar, dass es einfach genug wäre, diesen Serialisierungscode in eine separate generische Funktion oder was auch immer zu verschieben, aber das macht nichts sauberer.) – Brian

Verwandte Themen