WCF - использовать [DataContract] или нет.NET 3.5 SP1?

Я работаю с WCF .NET 3.5 SP1 и прочитал, что НЕ нужно украшать их сущности / коллекции такими вещами, как [DataMember], [DataConract] и / или [Serializable]? Каков наилучший путь? С чем вы все столкнулись?

Я на 3.5 SP1.

2 ответа

Решение

См. Использование контрактов данных.

Новые сложные типы, которые вы создаете, должны иметь контракт данных, определенный для их сериализации. По умолчанию DataContractSerializer выводит контракт данных и сериализует все общедоступные типы. Все общедоступные свойства чтения / записи и поля типа сериализуются. Вы можете отказаться от членов от сериализации, используя IgnoreDataMemberAttribute, Вы также можете явно создать контракт данных, используя DataContractAttribute а также DataMemberAttribute атрибутов. Обычно это делается путем применения DataContractAttribute атрибут типа. Этот атрибут может применяться к классам, структурам и перечислениям. DataMemberAttribute Атрибут затем должен быть применен к каждому члену типа контракта данных, чтобы указать, что это элемент данных, то есть он должен быть сериализован. Для получения дополнительной информации см. Сериализуемые типы.

Как сказал @Terry, вероятно, лучше заранее объявить, какие свойства вы хотите предоставить. Таким образом, вы можете в будущем защитить свой код от непреднамеренного раскрытия полей, когда базовый класс добавит открытое свойство в будущем.

Я придерживаюсь мнения, что не помешает заранее выразить ваше намерение использовать класс в качестве DataContract. Я предполагаю, что класс, который не сериализуем, все еще не будет полезен как DataContract в SP1...:)

Другие вопросы по тегам