Como excluir observadores não serializáveis de um implementador [Serializable] INotifyPropertyChanged?
Tenho quase uma centena de classes de entidades assim:
[Serializable]
public class SampleEntity : INotifyPropertyChanged
{
private string name;
public string Name
{
get { return this.name; }
set { this.name = value; FirePropertyChanged("Name"); }
}
[field:NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;
private void FirePropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this,
new PropertyChangedEventArgs(propertyName));
}
}
Observe o[field:NonSerialized]
atributo emPropertyChanged
. Isso é necessário, pois alguns dos observadores (no meu caso - uma grade exibindo as entidades para edição) podem não ser serializáveis, e a entidade precisa ser serializável, porque é fornecida - via comunicação remota - por um aplicativo em execução em uma máquina separadora .
Esta solução funciona bem para casos triviais. No entanto, é possível que alguns dos observadores sejam[Serializable]
e precisaria ser preservado. Como devo lidar com isso?
Solutions Estou considerando:
cheioISerializable
- a serialização personalizada exige a criação de muito código, eu preferiria não fazer issousing[OnSerializing]
e[OnDeserializing]
atributos para serializarPropertyChanged
manualmente - mas esses métodos auxiliares fornecem apenasSerializationContext
, que o AFAIK não armazena dados de serialização SerializationInfo
faz isso)