Правильно ли сериализовать событие? (Применение атрибута DataMember) - PullRequest
0 голосов
/ 06 июня 2011

Очень простой вопрос ...

Правильно ли применять атрибут DataMember к событию или делегату для его сериализации?

Подумайте, что я думаю об этом:

1) Ну, делегат - это тип, основанный на других типах, поэтому, если эти типы сами сериализуемы, нет необходимости (не правильно) сериализовать делегат.

2) Учитывая, что событие основано на делегате и что делегат (из-за того, что сказано в 1) не нуждается в прямой сериализации, я предполагаю, что событие не нужно отмечать как сериализуемое.

Итак, мой вопрос:

Правильно ли использовать атрибуты сериализации для событий и делагетов?

Если ответ «НЕТ! Нет необходимости делать их сериализуемыми», Правильны ли 1) и 2)?

Другой вопрос: какие элементы в классе разработчик должен пометить как сериализуемые (используя DataMember на них)?

Thankyou

1 Ответ

3 голосов
/ 06 июня 2011

Нет, это не правильно. DataMember может применяться только к свойству или полю - это определяется AttributeTargets:

[AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field, 
    Inherited = false, AllowMultiple = false)]
public sealed class DataMemberAttribute : Attribute
{ ... }

AttributeTargets имеют отдельное значение для Enum и Delegate.

Делегат или событие сериализации в распределенной системе не имеет смысла. Вы передаете данные в совместимом формате. Сообщение может содержать только данные. Нечего описывать делегаты (объектно-ориентированный указатель на метод, находящийся в памяти вашего процесса) или события (триггер для делегатов, живущих в памяти вашего процесса).

Если вы хотите иметь события контракта данных на своем клиенте, вы должны поделиться сборкой с контрактом между сервисом и клиентом. В этом случае обе стороны будут иметь одинаковый тип (со всеми событиями, методами, свойствами только для чтения и т. Д.), И они будут передавать только данные, хранящиеся в экземпляре типа.

...