Я бы поставил [DataContract]
атрибуты для классов и [DataMember]
для всех свойств, которые вы хотите включить в сообщения WCF.
[DataContract]
public class Customer
{
string _firstname;
string _lastname;
List<BO> _bos;
List<AO> _aos;
[DataMember]
public string FirstName
{
get { return _firstname; }
set { _firstname = value; }
}
[DataMember]
public string LastName
{
get { return _lastname; }
set { _lastname = value; }
}
[DataMember]
public System.Collections.Generic.List<AvailableOption> AvailableOptions
{
get { return _availableoptions; }
set { _availableoptions = value; }
}
[DataMember]
public System.Collections.Generic.List<BuiltOption> BuiltOptions
{
get { return _builtoptions; }
set { _builtoptions = value; }
}
}
[DataContract]
public class AO
{
string _code;
[DataMember]
public string Code
{
get { return _code; }
set { _code = value; }
}
}
[DataContract]
public class BO
{
string _code;
[DataMember]
public string Code
{
get { return _code; }
set { _code = value; }
}
}
С WCF в .NET 3.5 SP1 это больше необязательные критерии, но чтобы быть ясным и ясным в моих намерениях, я бы все равно их применил.Вам необходимо украсить все классы и их свойства этими объектами - даже вложенные и наследующие классы и т. Д.
Кроме того, используемый вами атрибут [Serializable]
не имеет никакого отношения к WCFсериализация сообщений.WCF использует либо сериализатор контракта данных (по умолчанию) с использованием атрибутов [DataContract] / [DataMember]
, либо XmlSerializer (необязательно; работает и без атрибута [Serializable]
).