我有一个类需要序列化到 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' 具有数据合同名称 'BarProxy3bb05a31167f4ba492909ec941a54533:http://schemas.datacontract.org/2004/07/' 不被预期。 将任何静态未知的类型添加到已知类型列表中, 例如使用KnownTypeAttribute属性或通过添加它们到传递给DataContractSerializer的已知类型列表中
我尝试将KnownType属性添加到foo类中
[KnownType(typeof(Bar))]
但我仍然收到相同的错误提示。
有谁能帮助我解决这个问题吗?
非常感谢。
Dave