我有延拓法
public static T DeepClone<T>(this T source) where T : ISerializable
{
..
}当我添加"where T: ISerializable“时,所有使用具有可序列化属性的DeepClone()类都会出错。
编辑:
和ISerializable时,序列化输出有什么不同吗?
发布于 2011-02-11 14:02:41
有两种方法可以使类型可序列化。
在你的例子中,你只考虑第一个。
要解决这个问题,只需让序列化程序处理错误报告。它将为任何不可序列化的对象抛出错误。
发布于 2011-02-11 14:01:14
问题是分配属性(Serializable)与实现接口(ISerializable)没有任何共同之处。
发布于 2014-04-14 23:52:03
我只想对这个答案再多说几句。可序列化的vs ISerializable让我困惑了一段时间,我终于把它弄清楚了。
当您希望类可序列化时,可以应用serializable属性。这就是你所需要的(今天也是如此)。但是,有时您需要更好地控制序列化过程(也许序列化对象的接收方有一些您的对象不那么关心的严格要求)。为了处理在.NET 2.0前如何序列化对象的任何定制,除了应用可序列化属性之外,还实现了ISerializable接口。
ISerializable接口有一个单一的功能要求:
void GetObjectData(SerializationInfo info,StreamingContext context)在这个函数中,您序列化了内容:
GetObjectData(SerializationInfo info,StreamingContext context)
{
// example of some type of customization of the serialization process, giving
// your serialized class member a custom name
info.AddValue("GiveMyDataMemberCustomNameInOutput", myDataMember);
...随着一些附加的可序列化属性的出现(.NET 2.0),您不需要实现ISerializable.GetObjectData()来定制某种东西是如何序列化的。
那么,如何以更新的方式处理时髦的序列化呢?Serializable有一些合作伙伴,特别是OnSerializing和OnDeserialized。如果您需要执行以前使用ISerializable.GetObjectData()进行的时髦序列化/反序列化,那么现在可以在事件中处理它。
我想指出两件事:
。
https://stackoverflow.com/questions/4969816
复制相似问题