我有一个类,我需要能够序列化为 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 服务可以工作,但是当对象无法序列化到会话时。如果我从类 Bar 中删除 DataContract 属性,WCF 服务会失败说
输入数据合同名称为“BarProxy3bb05a31167f4ba492909ec941a54533: http://schemas.datacontract.org/2004/07/ ”的“BarProxy3bb05a31167f4ba492909ec941a54533”是不应该的。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中
我尝试将 KnownType 属性添加到 foo 类
[KnownType(typeof(Bar))]
但我仍然得到同样的错误。
谁能帮我解决这个问题?
非常感谢
戴夫