У меня возникли проблемы с сериализацией типов, полученных через точку конечной точки WCF mex, если я использую эти типы для отображения данных в WPF.Отметить событие как NonSerialized во время выполнения с использованием отражения
Это связано с тем, что автогенерируемые типы реализуют интерфейс INotifyPropertyChanged и потому, что подписка WPF подписывается на нее.
Обычный способ сделать это будет добавление [field: NonSerialized] в объявление события. Я не хочу этого делать, потому что классы были сгенерированы автоматически.
Я также не хочу переключиться на DataContractSerializer, главным образом потому, что я нахожу BinaryFormatter, что я использую довольно удобно во всех остальных случаях.
Что бы я хотел сделать, это найти поле, в котором хранятся данные события и пометить его как NonSerialized до начала сериализации с использованием отражения.
Вот мои вопросы:
- Можно ли добавлять атрибуты во время выполнения?
- Как найти поле, связанное с событием?
http://stackoverflow.com/questions/2160476/how-to-set-attributes-values-using-reflection – bit2know
Это не может работать. Если вы действительно хотите избежать атрибутов вашего основного класса, тогда объявите еще один, который представляет его сериализованное состояние. Плюс код, который преобразуется от одного к другому. –
Если вы используете WCF, как вы теперь используете BinaryFormatter? Единственные способы, которые я знаю, - это использовать NetDataContractSerializer и поставщика суррогат сериализации, который использует BinaryFormatter ... или создать свой собственный формуляр сообщений WCF. Я спрашиваю, потому что это имеет отношение к ответу на ваш вопрос. – Jeff