Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > бинарная сериализация без инфы о классе


Автор: gambit 22.3.2011, 13:32
Добрый день. Проблема в сериализации дессериализации. Косяк в том, что сериализатор пишет всю инфу о сборке, и если сборка изменилась, то при десериализации на приведении типов все падает, так как сборки не совпадают. Как это обойти?? Как засавить не писать сериализатор всю эту инфу?? Ибо проект пишется и сборка постоянно меняется, тем более что после релиза тоже что то может поменятся, и после каждого пука у нас приличная по размерам база становится недоступна.

Добавлено через 4 минуты и 26 секунд
Вариант с реализацией ISerializable нам поможет?? Спрашиваю потому что классов очень много, и правка сейчас займет много времени, а может эт вообще не то.
Код

 [Serializable]
    public class A : ISerializable
    {
        public int AAAA { get; set; }
        public int BBBB { get; set; }

        public A() { }

        protected A(SerializationInfo info, StreamingContext context)
        {
            AAAA = (int)info.GetValue("AAAA", typeof(int)); 
            BBBB = (int)info.GetValue("BBBB", typeof(int));
        }

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("AAAA", AAAA);
            info.AddValue("BBBB", BBBB);
        }
    }


Автор: mihryak 22.3.2011, 17:07
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.binary.binaryformatter.assemblyformat.aspx не пробовал? во втором фреймворке работал бажно, быть может, уже починили

Автор: gambit 22.3.2011, 19:14
Еще утром пробовал - не починили((

Автор: Voyager 23.3.2011, 00:25
А что если попробовать вариант - после сериализации в MemoryStream подчищать информацию о классе в буфере потока, а при десиреализации добавлять всегда актуальную, чтобы не падало. Разобрать формат бинарника и решить эту проблему с такой позиции - вариант?

Автор: jonie 23.3.2011, 10:02
Цитата(gambit @  22.3.2011,  13:32 Найти цитируемый пост)
Косяк в том, что сериализатор пишет всю инфу о сборке, и если сборка изменилась, то при десериализации на приведении типов все падает, так как сборки не совпадают. Как это обойти?? Как засавить не писать сериализатор всю эту инфу?? Ибо проект пишется и сборка постоянно меняется, тем более что после релиза тоже что то может поменятся, и после каждого пука у нас приличная по размерам база становится недоступна.

а оно не смотрит на конфигурацию приложения в части редиректа версий?

Автор: gambit 23.3.2011, 11:58
Цитата(Voyager @  23.3.2011,  00:25 Найти цитируемый пост)
А что если попробовать вариант - после сериализации в MemoryStream подчищать информацию о классе в буфере потока, а при десиреализации добавлять всегда актуальную, чтобы не падало. Разобрать формат бинарника и решить эту проблему с такой позиции - вариант? 

при таком подходе проще выкинуть всю сериализацию, и написать свою.

Цитата(jonie @  23.3.2011,  10:02 Найти цитируемый пост)
а оно не смотрит на конфигурацию приложения в части редиректа версий? 

понятия не имею

Автор: mihryak 23.3.2011, 15:04
Цитата(jonie @  23.3.2011,  11:02 Найти цитируемый пост)
а оно не смотрит на конфигурацию приложения в части редиректа версий? 

http://msdn.microsoft.com/en-us/library/7wd6ex19%28v=vs.71%29.aspx - тоже не слишком удобная штука, надо не забывать обновлять

Автор: Voyager 23.3.2011, 23:02
>>при таком подходе проще выкинуть всю сериализацию, и написать свою.
При вашем подходе вы хотите многого при минимуме телодвижений. smile
Поизучайте в рефлекторе как работает сериализатор, авось какие мысли возникнут.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)