У меня есть класс, который мне нужно иметь для сериализации в переменную сеанса SQLServer и быть доступным через службу WCF. Я объявил это следующим образом
namespace MyNM
{
[Serializable]
[DataContract(Name = "Foo", Namespace = "http://www.mydomain.co.uk")]
public class Foo : IEntity, ISafeCopy<Foo>
{
[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<Bar>
{
#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
}
Но когда я пытаюсь вызвать эту службу, я получаю следующую ошибку в журнале трассировки.
"System.Runtime.Serialization.InvalidDataContractException:
Тип
'BarProxybcb100e8617f40ceaa832fe4bb94533c'
не может быть ISerializable и иметь
Атрибут DataContractAttribute. "
Если я уберу атрибут Serializable, служба WCF работает, но когда объект не может быть сериализован в сеанс. Если я удалю атрибут DataContract из класса Bar, служба WCF завершится с ошибкой, сказав
Тип
'BarProxy3bb05a31167f4ba492909ec941a54533'
с названием контракта данных
«BarProxy3bb05a31167f4ba492909ec941a54533: http://schemas.datacontract.org/2004/07/'
не ожидается Добавить любые типы не
статически известен к списку известных
типы - например, с помощью
Атрибут KnownTypeAttribute или
добавив их в список известных типов
передано в DataContractSerializer
Я пытался добавить атрибут KnownType в класс foo
[KnownType(typeof(Bar))]
Но я все еще получаю ту же ошибку.
Может кто-нибудь помочь мне с этим?
Большое спасибо
Дейв