WCF的复杂对象?

时间:2012-02-07 18:34:20

标签: jquery asp.net .net ajax wcf

我在从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; }
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

感谢您的评论。启用跟踪有助于我找到问题所在。问题是因为我使用了NHibernate,惰性加载了Role对象,并且使用了该对象的代理,并且无法序列化该代理对象。

Type 'DecoratorAopProxy_70ab9a81c5b84b6dbf624b0a94f7028e' cannot be ISerializable and have DataContractAttribute attribute.

我已关闭延迟加载,这解决了问题。非常感谢你!