A circular reference was detected while serializing an object of type 'XXX'

I ran into an issue earlier when trying to return an entity class through a web service for use in an AJAX page. After some quick research, I came across a post by Darren Neimke that referenced Rick Strahl's post about LINQ to SQL and Serialization. For me, performing the first work-around and setting the relationship to 'Friend' worked.

Thanks Rick and Darren!

8 Comments

  • No worries Jason! :-)

  • Or, select all and then give a NULL value to those properties, they will not pass along in the xml/soap message, as if they didnt exist :P, but im going to try the Friends one too

  • http://www.west-wind.com/Weblog/posts/147218.aspx

  • I think you guys mean "internal". The term "friend" is not used in the linked article.

  • 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 _applications;
    private IList _groups;
    private IList _applicationRequests;



  • CONTINUED.....

    the 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 Groups
    {
    get
    {
    return _groups;
    }
    set
    {
    _groups = value;
    }
    }

    public virtual IList UserPrivileges
    {
    get
    {
    return _userPrivileges;
    }
    set
    {
    _userPrivileges = value;
    }
    }

    public virtual IList 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 _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 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..

  • Hi,
    I got the circular reference while working on Entity Framework and i used the scriptIgnore attribute and the serialization was fine . But if i use POCO the serialization fails even if i include ScriptIgnore attribute. Could you help me in solving this issue

  • hi, Kalyan Revadi
    using attribute [scriptIgnore] in groups class, it still does not work, the same error will be appear. again. Any other ideas ?

Comments have been disabled for this content.