Начиная с .NET 3.5 SP1 DataContractSerializer не требует использования атрибутов (называемых поддержкой POCO).Хотя это дает вам небольшой контроль над XML, который создается
Однако, если у вас уже есть служба ASMX, которую вы хотите портировать, тогда сохраняйте ту же сериализацию, которую вы действительно хотите использовать XmlSerializer.Вы можете подключить это в WCF с помощью атрибута [XmlSerializerFormat], который можно применять на контракте на обслуживание или на уровне отдельной операции
Редактировать: добавление раздела в DTO
Однакоразмещение бизнес-объектов на границах сервисов может привести к потенциальным проблемам:
- Возможно, вы предоставляете ненужные данные, которые являются частью ваших бизнес-правил
- Вы тесно связываете своих потребителей услуг с бизнес-уровнямипривнося хрупкость в их код и препятствуя свободному рефакторингу
Идея объектов передачи данных (DTO) заключается в создании классов, единственная роль которых в жизни состоит в управлении переходом между XML и объектным миром.Это также соответствует принципу единой ответственности .DTO, как правило, предоставляют необходимые данные и служат буфером между изменениями в бизнесе и форматом передачи.Вот пример
[ServiceContract]
interface ICustomer
{
[OperationContract]
CustomerDTO GetCustomer(int id);
}
class CustomerService : ICustomer
{
ICustomerRepository repo;
public CustomerService (ICustomerRepository repo)
{
this.repo = repo;
}
public CustomerService()
:this(new DBCustomerRepository())
{
}
public CustomerDTO GetCustomer(int id)
{
Customer c = repo.GetCustomer(id);
return new CustomerDTO
{
Id = c.Id,
Name = c.Name,
AvailableBalance = c.Balance + c.CreditLimit,
};
}
}
class Customer
{
public int Id { get; private set; }
public string Name { get; set; }
public int Age { get; set; }
public decimal Balance { get; set; }
public decimal CreditLimit { get; set; }
}
[DataContract(Name="Customer")]
class CustomerDTO
{
[DataMember]
public int Id { get; private set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public decimal AvailableBalance { get; set; }
}
Использование DTO позволяет вам раскрыть существующую бизнес-функциональность через сервисы без необходимости вносить изменения в эту бизнес-функциональность по чисто техническим причинам
Единственная проблема, с которой люди обычно сталкиваютсяВ связи с DTO возникает необходимость сопоставления между ними и бизнес-объектами.Однако, когда вы рассматриваете преимущества, которые они приносят, я думаю, что это небольшая цена, и она может быть значительно снижена с помощью таких инструментов, как AutoMapper