Ваши элементы данных (классы POCO) должны быть помечены как DataContracts для WCF, чтобы WCF явно знал, что ему нужно будет сериализовать для отправки по проводам.
В отличие от сериализатора Xml, DataContractSerializer в WCF использует модель "opt-in" - только те вещи, которые вы явно * помечаете как [DataContract]
и [DataMember]
, будут сериализованы - все остальное будет игнорироваться.
[DataContract]
class YourPocoClass
{
[DataMember]
private int _ID;
[DataMember]
string CustomerName { get; set; }
public decimal CustomerOrderAmount { get; set; }
}
В этом примере, начиная с YourPocoClass
, вы будете иметь поле _ID
и свойство CustomerName
, которые будут сериализованы в сообщение WCF, но CustomerOrderAmount
будет , а не будет сериализовано. - public
или нет.
Итак, лучшая практика: явно пометить все ваши сложные типы, которые вам нужно отправить в WCF, с помощью [DataContract] (для класса) и [DataMember] (для каждого члена, который будет отправлен внутри этого класса).
Марк