Создание сервисного подкласса класса WCF DataContract

Возможна ли следующая концепция или у меня возникнут проблемы с сериализацией этого для Клиента. Предполагая, что все соединения имеют дело только с BaseContractClasses, но Сервер использует специальный подкласс для сопоставления дополнительных данных только для сервера.

[DataContract]
public class BaseContractClass
{
  [DataMember]
  public int valueToTransmit;
}

public class ServiceOnlyContractClass : BaseContractClass
{
  public int valueNotToTransmit;
}

1 ответ

Решение

Этот новый класс ServiceOnlyContractClass будет наследовать все поля и все от своего базового класса, но, поскольку он не имеет атрибутов [DataContract] или [DataMember], он не будет отображаться в вашем контракте на обслуживание (WSDL/XSD).

Если это то, что вы хотите, да, это способ сделать это. Атрибуты DataContract и DataMember специфичны, например, вы должны явно установить их, и они не будут наследоваться производным классам.

ОБНОВЛЕНИЕ:.NET 3.5 с пакетом обновления 1 представил новый набор правил для WCF DataContractSerializer, и похоже, что какой-либо открытый класс и любое из его открытых свойств будет сериализовано DCS начиная с.NET 3.5 SP1. Это было введено, чтобы упростить жизнь и позволить сериализацию классов POCO (Plain Old CLR Object) без их украшения атрибутами - но в то же время, кажется, нет способа отключить эту функцию, если вы не хотите Это.....

Для более подробной информации смотрите DataContracts без атрибутов.

Другие вопросы по тегам