要从Serializable INotifyPropertyChanged实现者中排除不可序列化的观察者,可以通过以下步骤实现:
[field: NonSerialized] public event PropertyChangedEventHandler PropertyChangedEx;
PropertyChangedEx
事件替代PropertyChanged
事件。OnPropertyChanged
方法,使其触发PropertyChangedEx
事件而不是PropertyChanged
事件。这样,在序列化时,不会包含不可序列化的观察者,从而避免了序列化错误。
以下是一个示例代码:
using System;
using System.ComponentModel;
using System.Runtime.Serialization;
namespace SerializationExample
{
[Serializable]
public class SerializableClass : INotifyPropertyChanged
{
[field: NonSerialized]
public event PropertyChangedEventHandler PropertyChangedEx;
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged(nameof(Name));
}
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEx?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
在这个示例中,PropertyChangedEx
事件用于替代PropertyChanged
事件,并且使用[field: NonSerialized]
属性标记,以避免在序列化时包含不可序列化的观察者。OnPropertyChanged
方法也被重写,以便在属性更改时触发PropertyChangedEx
事件。
领取专属 10元无门槛券
手把手带您无忧上云