Как мне разрешить PublicKeyToken в класс? (Проблема сериализации) - PullRequest
4 голосов
/ 15 ноября 2011

Надеюсь, я даже правильно задаю свой вопрос.При попытке сериализации определенного объекта я получаю следующее исключение (я знаком с использованием стандартного атрибута [Serializable])

Первое исключение типа System.Runtime.Serialization..SerializationException 'произошло в mscorlib.dll

Дополнительная информация: Тип' System.ComponentModel.Component 'в системе сборки', версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089 'не помечена как сериализуемая

Я не могу найти, откуда, черт возьми, это происходит.Ни один из моих классов не наследует от Component, ни один из их базовых классов не наследует от компонента.

Я дошел до того, что помечаю КАЖДЫЙ делегат \ член varialbe как [NonSerialized], и он по-прежнему выдает этоисключение каждый раз, когда я пытаюсь сериализоваться.

Поэтому мой вопрос: могу ли я использовать этот PublicKeyToken и найти, какой именно класс \ член пытается сериализовать?

Ответы [ 2 ]

4 голосов
/ 15 ноября 2011

Я дам предположение, основываясь на том, что видел слишком много раз, чтобы сосчитать : у вас есть event, и вы подписались на это событие на некоторый код пользовательского интерфейса или что-то еще Component связаны между собой.

При использовании BinaryFormatter события (или, скорее, поле поддержки) сериализуются. Если вы не хотите этого, убедитесь, что ваши события отмечены:

[field:NonSerialized]
public event EventHandler SomethingHappened;

Я также отмечу, что столько (IMO, субъективно) плохих вещей случается при использовании BinaryFormatter, что я действительно предложил бы использовать что-то еще. Например, XmlSerializer (бормочет что-то неразборчивое в том, что также доступен достаточно большой двоичный форматер с открытым исходным кодом).

1 голос
/ 15 ноября 2011

Нет, PublicKey не поможет вам найти проблему.PublicKeyToken - это ключ, который использовался для подписи сборки, и этот ключ используется для нескольких сборок CLR.

Я бы начал обрезать количество объектов для сериализации, пока проблема не исчезнет.Также попробуйте отключить «мой код» (Инструменты -> Параметры -> Отладка) и начать ломать все исключения - вы можете получить немного лучшее представление о том, где он не работает первым.

...