我在从JQuery AJAX调用WCF服务时遇到问题。 GetUserDetails工作正常,除非我尝试将此代码添加到User类:
[DataMember]
public virtual Role Role { get; set; }
添加代码后,我得到错误状态12152.如果我注释掉Role方法的[DataMember]属性,一切正常。
这是方法的OperationContract:
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped
)]
User GetUserDetails(string userName);
用户类:
[DataContract]
[KnownType(typeof(Role))]
public class User
{
[DataMember]
public virtual int UserId { get; set; }
[DataMember]
public virtual string UserName { get; set; }
[DataMember]
public virtual string FirstName { get; set; }
[DataMember]
public virtual string LastName { get; set; }
[DataMember]
public virtual string Email { get; set; }
[DataMember]
public virtual string Company { get; set; }
[DataMember]
public virtual string Comments { get; set; }
[DataMember]
public virtual bool IsApproved { get; set; }
[DataMember]
public virtual bool IsLocked { get; set; }
[DataMember]
public virtual bool LoggedIn { get; set; }
}
角色等级
[DataContract]
public class Role
{
[DataMember]
public virtual string Name { get; set; }
[DataMember]
public virtual string Description { get; set; }
}
感谢您的帮助!
答案 0 :(得分:1)
感谢您的评论。启用跟踪有助于我找到问题所在。问题是因为我使用了NHibernate,惰性加载了Role对象,并且使用了该对象的代理,并且无法序列化该代理对象。
Type 'DecoratorAopProxy_70ab9a81c5b84b6dbf624b0a94f7028e' cannot be ISerializable and have DataContractAttribute attribute.
我已关闭延迟加载,这解决了问题。非常感谢你!