I ran into the same problem and THE ONE OF SOLUTION IS to
Use [ScriptIgnore] atribute .. it will solve the problem.
add system.web.extensions reference and add namespace:
Using System.Web.Script.Serialization.
If you still have questions..Read on..for some detailed explanation..
i have a User class with..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Iesi.Collections.Generic;
using System.Runtime.Serialization;
namespace RAPortal.Core.Entities
{
public class User {
private int _userId;
private string _firstName;
private string _lastName;
private IList < Application > _applications;
private IList < Group > _groups;
private IList < ApplicationRequest > _applicationRequests;
....Properties..
public virtual int UserId {
get { return _userId; }
set { _userId = value; }
}
public virtual string Title {
get { return _title; }
set {
_title = !String.IsNullOrEmpty(value) ? value.ToUpper().Trim() : null;
}
}
public virtual IList < Group > Groups {
get { return _groups; }
set { _groups = value; }
}
public virtual IList < UserPrivilege > UserPrivileges
{
get { return _userPrivileges; }
set { _userPrivileges = value; }
}
public virtual IList < UserRole > UserRoles {
get { return _userRoles; }
set { _userRoles = value;}
}
...so on...
and I have Groups class..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Serialization;
using System.Runtime.Serialization;
namespace RAPortal.Core.Entities {
public class Group {
private int _groupId;
private string _name;
private IList < User > _users;
public virtual int GroupId {
get { return _groupId; }
set { _groupId = value; }
}
public virtual string Name {
get { return _name; }
set {
_name = !String.IsNullOrEmpty(value) ? value.ToUpper().Trim() : null;
}
}
[ScriptIgnore]
public virtual IList < User > Users {
get { return _users; }
set { _users = value; }
}
}
}
Since User is referenced in the groups.. the json think that it is Circular reference and It will throw an exception..so the fix is to add [ScriptIgnore] on top of the User. And add the reference and namespace to this class like it..
It solved my problem .. I am sure there are better ways out there !!! Cheers...
And remember you should add [scriptIgnore] only in the groups class and not in the Users class..