Еще одна интересная вещь: если вы украшаете свой код с помощью DataContract, у вас есть большой контроль над тем, что клиент может увидеть и должен отправить обратно в ваш сервис. Например:
[DataContract]
public class SampleClass
{
[DataMember(IsRequired=true)]
public int MyRequiredProperty { get; set; }
[DataMember]
public int MyOptionalProperty { get; set; }
public int MyInternalProperty { get; set; }
}
В приведенном выше примере вы определили, что при получении данных вы ДОЛЖНЫ иметь MyRequiredProperty и можете иметь или не иметь MyOptionalProperty. Кроме того, клиент никогда не увидит MyInternalProperty (это может быть, например, какое-то свойство, которое помогает вашей внутренней логике, но вы не хотите, чтобы оно отображалось на уровне клиента).