Ich habe fast hundert Entitätsklassen wie die Suche:Wie können nichtserialisierbare Beobachter von einem [Serializable] INotifyPropertyChanged-Implementor ausgeschlossen werden?
[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));
}
}
Mitteilung über das [field:NonSerialized]
Attribut auf PropertyChanged
. Dies ist notwendig, da einige der Beobachter (in meinem Fall ein Gitter, das die Entitäten für die Edition anzeigt) möglicherweise nicht serialisierbar sind und die Entität serialisierbar sein muss, weil sie - per Remoting - von einer Anwendung bereitgestellt wird, die auf einer separater Maschine läuft .
Diese Lösung eignet sich für triviale Fälle. Es ist jedoch möglich, dass einige der Beobachter [Serializable]
sind und beibehalten werden müssten. Wie soll ich damit umgehen?
Lösungen Ich erwäge:
- voll
ISerializable
- benutzerdefinierte Serialisierung erfordert viel Code zu schreiben, würde ich es vorziehen, nicht diese - mit
[OnSerializing]
und[OnDeserializing]
zu tun AttributePropertyChanged
manuell serialisiert werden - aber diejenigen, Hilfsmethoden bieten nurSerializationContext
, die AFAIK nicht Serialisierung Daten speichert (SerializationInfo
das tut)
invocation.Target kann Null sein (für anonyme Delegaten), achten Sie darauf, dies zu überprüfen – skolima
Diese Ereignisse haben keine Auswirkungen auf XmlSerializer (gut, ich, ich brauchte nur die Remoting zu arbeiten). – skolima
OnSerializing und OnDeserialized sollten privat sein und müssen nicht verfügbar gemacht werden. – skolima