Первое, что я хотел бы решить, прежде чем даже думать о отправке чего-либо, это то, что вы реорганизуете этот класс в более управляемые подкомпоненты.Возьмем, к примеру, свойства типа DeliveryNote
, DeliveryNoteId
, DeliveryNoteSerial
, которые могут быть размещены в классе Delivery
.То же самое можно сказать о Group
, Payback
и других аналогично названных свойствах.При разработке свойств класса вам нужно спросить себя, являются ли эти свойства специфичными для родительской модели или специфичными для меньшей проблемной области.
После того, как вы произвели рефакторинг этого класса, вам необходимо определить какие данные нужны клиенту.Нужна ли им каждая статья данных в этом классе.Если нет, то почему бы не создать класс представления, основанный на потребностях клиента, и отправить только это.
Если вы не считаете, что частичное представление подходит для ваших данных, вы можете использовать DataContractAttribute
и DataMemberAttribute
атрибуты для управления тем, какие части вашей модели фактически представляют контракт данных, передаваемый клиенту.Например:
[DataContract]
public class Task
{
[DataMember]
public string PropertyA { get; set; }
[DataMember]
public string PropertyB { get; set; }
public string PropertyC { get; set; }
}
В приведенном выше примере, используя эти атрибуты, я могу обеспечить, чтобы PropertyA
и PropertyB
составляли составные части контракта данных.PropertyC
не будет частью контракта, поэтому не будет сериализован.Это, конечно, зависит от использования DataContractSerializer
или службы WCF (которая использует этот сериализатор).
Это также ограничивает представление контракта с единичными данными модели.