У меня есть класс, который должен иметь возможность сериализовать переменную сеанса 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))]
Но я все равно получаю ту же ошибку.
Может ли кто-нибудь помочь мне с этим?
Большое спасибо
Дейв