И я должен помнить, что десериализованный граф объектов содержит новые объекты, старые ссылки больше не работают. D'о!

я есть почти сотня классов сущностей, выглядящих так:

[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));
    }
}

Обратите внимание на[field:NonSerialized] атрибут наPropertyChanged, Это необходимо, поскольку некоторые из наблюдателей (в моем случае - сетка, отображающая сущности для редакции) могут быть не сериализуемыми, а сущность должна быть сериализуемой, поскольку она обеспечивается - посредством удаленного взаимодействия - приложением, работающим на машине-разделителе ,

Это решение отлично работает для тривиальных случаев. Однако, возможно, что некоторые из наблюдателей[Serializable]и должен быть сохранен. Как мне справиться с этим?

Решения, которые я рассматриваю:

полныйISerializable - пользовательская сериализация требует написания большого количества кода, я бы предпочел не делать этогос помощью[OnSerializing] а также[OnDeserializing] атрибуты для сериализацииPropertyChanged вручную - но эти вспомогательные методы обеспечивают толькоSerializationContext, который AFAIK не хранит данные сериализации (SerializationInfo делает это)

Ответы на вопрос(0)

Ваш ответ на вопрос