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...:)