.net中DataContract属性和Serializable属性之间的区别

sam*_*mar 14 .net c# serialization clone

我正在尝试使用以下方法创建对象的深层克隆.

    public static T DeepClone<T>(this T target)
    {
        using (MemoryStream stream = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, target);
            stream.Position = 0;
            return (T)formatter.Deserialize(stream);
        }
    } 
Run Code Online (Sandbox Code Playgroud)

此方法需要一个Serialized对象,即一个具有"Serializable"属性的类的对象.我有一个类,它具有属性"DataContract",但该方法不使用此属性.我认为"DataContract"也是一种序列化器,但可能与"Serializable"不同.

有谁能请给我两者之间的区别?另请告诉我是否可以创建一个只有1个属性的对象的深度克隆,它可以完成"DataContract"和"Serializable"属性的工作,也可能是创建深度克隆的不同方式?

请帮忙!

Ode*_*ded 23

SerializableBinaryFormatter工作需要.

DataContractDataMember属性一起使用DataContractSerializer.

您可以使用两个序列化程序的属性来装饰类.


Liv*_* M. 6

DataContract用于WCF因此.NET 3.0+.在.net 2.0或更低版本中,不存在DataContract DataMember属性Serializable.

正如Oded所说,如果你想使用BinaryFormatter,你必须使用Serializable来装饰类型.