Более чистый способ глубокого копирования класса AutoGenerated WebService

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

Вопрос

В настоящее время я использую сериализацию для создания глубоких копий некоторого автоматически сгенерированного класса веб-сервиса. Это более чистый способ сделать это? Классы создаются автоматически, поэтому я не хочу к ним прикасаться. Более подробно:

Мой текущий код (работает нормально) такой:

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

Код используется для копирования автоматически сгенерированного класса. Когда я добавил веб-ссылку в запрос на мыло, 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;
        }
    }
    //...
}
Это было полезно?

Решение

Глубокое клонирование болезненно. Если классы поддерживают сериализацию, это лучший (= самый надежный) вариант. Все остальное - это много работы.

На самом деле, поскольку типы поддерживают сериализацию xml, естественным выбором здесь будет XmlSerializer .

Есть ли проблема, которую вы хотите решить? Производительность?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top