2011-01-27 4 views
0

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

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

Благодаря

+1

С атрибутом IgnoreDataMember? – vorrtex

ответ

1

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

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

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

+0

Я удалил атрибуты [DataContract] [DataMember], чтобы проверить, что произойдет. Я разочарован, узнав, что они не контролируют, какие свойства включены. Итак, как бы вы исключали публичное свойство из сериализации с использованием WCF? Спасибо за ответ. –

+0

Ну, вы можете использовать [Serializable] + [NonSerializable] или явно использовать [DataContract] + [DataMember]. Одна очень важная причина, по которой вы не должны пытаться избежать [DataContract], просто заключается в том, что она предоставляет возможность явно контролировать порядок полей в контракте (через свойство Order [DataMember], которое * очень важно для управления версиями (поскольку порядок по умолчанию в WCF - это алфавитный порядок, а не порядок объявления) – tomasr