Скрыть общедоступные свойства из DataContract

Я удалил атрибут [DataMember] из всех своих общедоступных свойств, но эти свойства все еще отображаются в результатах моих операций WCF. Я нашел эту ссылку здесь, которая объясняет, включен ли .Net оба конца провода, то DataMember не имеет большого влияния на определение того, какие свойства включены в DataContract.

Итак, как исключить включение общедоступных свойств в результаты WCF?

Спасибо


person Tom Schreck    schedule 27.01.2011    source источник
comment
С атрибутом IgnoreDataMember?   -  person vortexwolf    schedule 28.01.2011


Ответы (1)


Существует несколько разных способов работы сериализации в WCF. Они изложены здесь. Обратите внимание, что также можно использовать классы [Serializable].

Обратите внимание на последний элемент в этом списке: начиная с 3.5 SP1, классы, не помеченные какими-либо параметрами, по-прежнему будут сериализованы инфраструктурой WCF. Однако если вы это сделаете, у вас не останется возможности контролировать, как происходит эта сериализация и какие свойства сериализуются (вот почему я лично считаю, что этот вариант был добавлен ошибкой, но это уже другая история).

Есть ли причина, по которой вы удалили атрибуты [DataContract] [DataMember]?

person tomasr    schedule 28.01.2011
comment
Я удалил атрибуты [DataContract] [DataMember], чтобы проверить, что произойдет. Я разочарован, узнав, что они не могут контролировать, какие свойства включены. Итак, как бы вы исключили публичное свойство из сериализации с помощью WCF? Спасибо за ответ. - person Tom Schreck; 28.01.2011
comment
Что ж, вы можете использовать [Serializable] + [NonSerializable] или явно использовать [DataContract] + [DataMember]. Одна очень важная причина, по которой вы не должны пытаться избегать [DataContract], заключается просто в том, что он предоставляет способ явного управления порядком полей в контракте (через свойство Order [DataMember], которое имеет значение very важно для управления версиями (поскольку по умолчанию в WCF используется алфавитный порядок, а не порядок объявления) - person tomasr; 28.01.2011