在我的WPF应用程序上,我正在使用
DataContractSerializer
要序列化对象。我注意到它无法序列化具有事件或委托声明的类型。考虑以下失败代码:
[Serializable]
public abstract class BaseClass
{
public string Name { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}
public class DerivedClass : BaseClass
{
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
DerivedClass derivedClass = new DerivedClass {Name = "Test", Age = 10};
derivedClass.PropertyChanged += (sender, eventArgs) => Console.WriteLine("hello");
DataContractSerializer serializer = new DataContractSerializer(typeof(DerivedClass));
using(FileStream stream = new FileStream("c:\\test.txt", FileMode.Create, FileAccess.ReadWrite))
{
serializer.WriteObject(stream, derivedClass);
}
}
}
这条消息失败了
类型
'System.DelegateSerializationHolder+DelegateEntry'
带数据合同名称
'DelegateSerializationHolder.DelegateEntry:
http://schemas.datacontract.org/2004/07/System
’
不是预期的。不添加任何类型
静态已知到已知列表
类型-例如,通过使用
KnownTypeAttribute属性或
将它们添加到已知类型的列表中
传递到DataContractSerializer。
我试图添加属性,比如
[DataMember(IsRequired = false)]
在事件上指示它不应序列化,但不起作用。
当我移除
[Serializable]
属性来自
BaseClass
. 我想知道为什么这种行为?避免给予安全吗
[可序列化]
属性?
.NET Framework版本:3.5 SP1