Просто для полноты, выходящей за пределы точки зрения Джона, другой момент здесь заключается в том, что в многих (не во всех) сценариях контракт данных генерируется из какой-либо модели (dbml, EF, wsdl, proto и т. Д.),Таким образом, нет явных дополнительных затрат на явные свойства, а явные свойства работают на большем количестве языковых версий.
Кроме того, код шаблона может включать в себя частичные методы, позволяющие выполнять операции до / после операции,и другие рамки кода.Эта часть шаблона может быть опущена в опубликованном примере для краткости.
Наконец, контракты данных могут быть необязательно указаны для поля , что позволяет использовать свойства только для чтения и т. Д.
[DataContract]
public class MyFaultException
{
[DataMember(Name="Reason")]
private string _reason;
public string Reason { get { return _reason; } }
}