在Silverlight中对象深度复制

本文关键字:深度 复制 对象 Silverlight | 更新日期: 2023-09-27 18:18:31

我试图在 silverlight 5中创建对象的副本,其中接口如IFormatters和IcCloanble不支持。*

我的对象是这样的:(注意这些对象是在反序列化xml时获得的):我试着像这样复制:

    [XmlRoot(ElementName = "component")]
        public class Component
        {
            [XmlElement("attributes")]
            public Attributes Attributes { get; set; } 
            [XmlIgnore]
            public Attributes atrbtOrginal = new Attributes();
            [XmlIgnore]
            public Attributes atrbtCopy{ get; set; }
        }
        public Component()
            {          
                atrbtCopy= atrbtOrginal ;
            } 

肯定它不会工作,然后我得到了这个代码在谷歌搜索:

 public static class ObjectCopier
    {
        public static T Clone<T>(T source)
        {
            if (!typeof(T).IsSerializable)
            {
                throw new ArgumentException("The type must be serializable.", "source");
            }
            // Don't serialize a null object, simply return the default for that object
            if (Object.ReferenceEquals(source, null))
            {
                return default(T);
            }
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new MemoryStream();
            using (stream)
            {
                formatter.Serialize(stream, source);
                stream.Seek(0, SeekOrigin.Begin);
                return (T)formatter.Deserialize(stream);
            }
        }
    }
And i thought of doing something liek this:
objectOrginal.Clone();.

但是silverlight5中的问题是:

Error   2   The type or namespace name 'BinaryFormatter' could not be found (are you missing a using directive or an assembly reference?)   
Error   1   The type or namespace name 'IFormatter' could not be found (are you missing a using directive or an assembly reference?)

在Silverlight 5中是否有其他选择?请详细解释一下。非常感谢。

在Silverlight中对象深度复制

在你的类上实现DataContractSerializer属性(DataContract, DataMember)并调用DataContractSerializer将其序列化到MemoryStream,然后再次使用它将MemoryStream序列化到对象的新实例。到目前为止最容易理解,而且性能也很好。

类定义的例子:

[DataContract]
class MyClass
{
    [DataMember]
    public int MyValue {get;set;}
    [DataMember]
    public string MyOtherValue {get;set;}
}

从一个类实例克隆到另一个类实例的方法在Microsoft文档http://msdn.microsoft.com/en-us/library/ms752244(v=vs.110).aspx

中有介绍。