Reputation: 143
I'm having a problem calling the WCF service from JQuery AJAX. GetUserDetails works fine unless I try add this code to the User class:
[DataMember]
public virtual Role Role { get; set; }
After code is added I get error status 12152. If I comment out [DataMember] attribute of the Role method everything works.
Here's OperationContract for the method:
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped
)]
User GetUserDetails(string userName);
And User class:
[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; }
}
Role class
[DataContract]
public class Role
{
[DataMember]
public virtual string Name { get; set; }
[DataMember]
public virtual string Description { get; set; }
}
I would appreciate your help!
Upvotes: 1
Views: 550
Reputation: 143
thank you for your comments. Enabling tracing helped to me find the problem. The problem was because I used NHibernate, Role object were lazy loaded and proxy for that object were used and that proxy object couldn't be serialized.
Type 'DecoratorAopProxy_70ab9a81c5b84b6dbf624b0a94f7028e' cannot be ISerializable and have DataContractAttribute attribute.
I have turned off lazy loading and that solved the issue. Thank you very much!
Upvotes: 1