"Смешанная" сериализация
От: Draconus  
Дата: 30.10.06 13:39
Оценка:
Добрый день!

Вопрос относительно сериализации. Я сериализую в бинарный файл связанный набор объектов. Часть из них сериализуется автоматически. Для других объектов пишется ручная сериализация, через ISerializable. По ходу отладки написанного кода, я был неприятно удивлен следующим фактом: если объект класса A агрегирует объект класса B, и сериализация A ручная, а B — автоматическая, то возможна ситуация, когда объект B полностью не десериализован к тому моменту, когда десериализатор A уже использует его данные. Приведу пример:

// автоматически сериализуемый класс
[Serializable]
public class B
{
    public int Data
    {
        get { return data; }  { set data = value }
    }
    private int data;
    private int data2;
    private int data3;
}

// класс с ручной сериализацией
[Serializable]
public class A : ISerializable
{
    private B b;  
    private int data;
    
    public void GetObjectData( SerializationInfo info, StreamingContext context )
    {
        info.AddValue( "b", b );
    }
    
    protected A( SerializationInfo info, StreamingContext context )
    {
        b = (B)info.GetValue( "b", typeof( B ) );
        data = b.Data;    // вот в этом месте совсем не гарантируется, что значение b.data 
                // уже десериализовано, а не содержит дефолтное значение
    }
}


В результате для класса "B" я вынужден тоже писать ручную десериализацию. И так далее... Получается, если объект верхнего уровня сериализуется вручную, то и остальные тоже приходится ручками... Подскажите, может я чего не раскурил?

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.