在我的WPF應用程序中,我使用DataContractSerializer
來序列化對象。我發現它無法序列化獲得事件或委託聲明的類型。考慮下面的代碼失敗: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)]
這樣的屬性來表明它不應該被序列化,但是沒有任何工作。
當我從BaseClass
中刪除[Serializable]
屬性時,一切正常。我想知道爲什麼這種行爲?避免給[Serializable]
屬性安全嗎?
.NET framework版本:3.5 SP1
真棒。有效!這些信息在MSDN上可用嗎? – 2010-08-13 12:19:27