У меня есть класс, который я должен смочь сериализировать к переменной сеанса SQLServer и быть доступным по Сервису WCF. Я объявил это следующим образом
namespace MyNM
{
[Serializable]
[DataContract(Name = "Foo", Namespace = "http://www.mydomain.co.uk")]
public class Foo : IEntity, ISafeCopy
{
[DataMember(Order = 0)]
public virtual Guid Id { get; set; }
[DataMember(Order = 1)]
public virtual string a { get; set; }
DataMember(Order = 2)]
public virtual Bar c { get; set; }
/* ISafeCopy implementation */
}
[Serializable]
[DataContract(Name = "Bar ", Namespace = "http://www.mydomain.co.uk")]
public class Bar : IEntity, ISafeCopy
{
#region Implementation of IEntity
DataMember(Order = 0)]
public virtual Guid Id { get; set; }
[DataMember(Order = 1)]
public virtual Baz y { get; set; }
#endregion
/* ISafeCopy implementation*/
}
[Serializable]
[DataContract]
public enum Baz
{
[EnumMember(Value = "one")]
one,
[EnumMember(Value = "two")]
two,
[EnumMember(Value = "three")]
three
}
Но когда я пытаюсь назвать этот сервис, я получаю следующую ошибку в журнале трассировки.
"Система. Время выполнения. Сериализация. InvalidDataContractException: Тип 'BarProxybcb100e8617f40ceaa832fe4bb94533c' не может быть ISerializable и сделать, чтобы DataContractAttribute приписал".
Если я вынимаю сериализуемый атрибут, сервисные работы WCF, но когда объект не может быть сериализирован к сессии. Если я удаляю атрибут DataContract из класса Панель, сервисное высказывание сбоев WCF
Тип 'BarProxy3bb05a31167f4ba492909ec941a54533' с названием контракта данных 'BarProxy3bb05a31167f4ba492909ec941a54533:http://schemas.datacontract.org/2004/07 /' не ожидается. Добавьте, что любые типы, не известные статически списку известных типов - например, при помощи атрибута KnownTypeAttribute или путем добавления их к списку известных типов, передали DataContractSerializer
Я попытался добавить, что KnownType приписывает классу нечто
[KnownType(typeof(Bar))]
Но я все еще получаю ту же ошибку.
Кто-либо может выручить меня с этим?
Большое спасибо
Dave
Этот вопрос по MSDN может помочь: DataContract против Serializable .
Принятый ответ из этой цепочки:
[DataContract ]
и[Serializable]
можно использовать вместе.DataContractSerializer понимает их оба. Если тип отмечен обоими из них, он будет иметь проекцию
[DataContract]
Вот документы по передаче данных и сериализации в WCF, которые предоставляют много подробностей о сериализаторах и известный тип: Передача данных и сериализация