Создание графика спектра в Dash / Plotly с обратным вызовом

Я немного изучил это, используя исходный код . Прежде всего следует отметить, что класс Hashtable уже имеет некоторый контроль версии при сериализации / десериализации , поэтому, возможно, вам не нужно вводить свои собственные и искать причину проблемы где-то еще.

Теперь, переходя к вашему фактическому вопросу, исключение выбрасывается из метода OnDeserialization, потому что SerializationInfoTable пуст . И он пуст, потому что он заполняется только при вызове конструктора сериализации Hashtable(SerializationInfo info, StreamingContext context) , который не вызывается при использовании суррогатов. SerializationInfoTable является внутренним свойством во вложенном внутреннем классе, поэтому вы не можете много сделать с ним.

Что вы можете сделать, это создать унаследованный класс и переопределить GetObjectData и OnDeserialization, чтобы сделать твой материал там. Например,

        [Serializable]
    public class MyHashTable : Hashtable
    {
        private static SerializationInfo serializationInfo = null;

        protected MyHashTable(SerializationInfo info, StreamingContext context) : base(info, context)
        {
        }

        public MyHashTable() : base()
        {

        }
        public override void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            base.GetObjectData(info, context);
            info.AddValue("MyVersion", 0, typeof(int));

            serializationInfo = info;

        }

        public override void OnDeserialization(object sender)
        {
            base.OnDeserialization(sender);
            var myVersion = serializationInfo.GetValue("MyVersion", typeof(string));
            Console.WriteLine($"MyVersion: {myVersion}");
        }
    }
}

Надеюсь, что это поможет.

0
задан zvone 19 January 2019 в 15:18
поделиться