WPF uygulamasında, seri hale getirme nesnesini DataContractSerializer
kullanıyorum. Bir etkinlik veya delege beyanı olan türlerin serileştirilmediğini gözlemledim. Aşağıdaki başarısız kodu göz önünde bulundurun: beklenmemektedir:DataContractSerializer ile ilgili sorunlar/temsilci alanları
[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);
}
}
}
Bu mesajla
'System.DelegateSerializationHolder + DelegateEntry' veri sözleşme adı 'http://schemas.datacontract.org/2004/07/System DelegateSerializationHolder.DelegateEntry' ile Tip başarısız olur. Bilinen türlerine göre bilinen türlerini ekleyin; örneğin, KnownTypeAttribute özniteliğini kullanarak veya , DataContractSerializer'a aktarılan bilinen türleri listesine ekleyin.
Olayın serileştirilmemesi gerektiğini belirtmek için olayda [DataMember(IsRequired = false)]
gibi özellikler eklemeyi denedim, ancak hiçbir şey işe yaramadı.
BaseClass
'dan [Serializable]
özniteliğini kaldırdığımda her şey çalıştı. Bu davranış neden merak ediyorum? [Serializable]
özniteliğinden kaçınmak güvenli midir?
.NET framework sürümü: 3.5 SP1
harika. İşe yaradı! Bu bilgi MSDN'de mevcut mu? –