WEB API JSON Serializing Circular References

asp.net-web-api2 entity-framework-6 json.net

Question

I'm attempting to access the child entity's (Web API-received) property fields (JSON). However, while viewing the browser console, a reference is displayed rather than the fields. I'm not sure how to access these fields.

ARROW JS VIEW

 <table infinite-scroll='tF.loadMore()' infinite-scroll-disabled='tF.isBusy' infinite-scroll-distance='3' class="responsive">
            <thead>
                <tr>
                    <th>FIELD 1</th>
                    <th>FIELD 2</th>
                    <th>FIELD 3</th>
                    <th>FIELD 4</th>
                    <th>FIELD 5</th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="item in tF.items | filter:searchFilter">
                    <td>{{item.CompanyDomainModel.CompanyName}}</td>
                    <td>{{item.RatingDomainModel.RatingValue}}</td>
                    <td>{{item.Views}}</td>
                    <td>{{item.Clicks}}</td>
                    <td>{{item.EmailSent}}</td>
                </tr>
            </tbody>
            <tfoot ng-show='tF.isBusy'>
                <tr>
                    <td colspan="9"><spinner show="tF.isBusy" /><span class="bold">{{tF.status}}</span> </td>
                </tr>
            </tfoot>
        </table>

SERVICE

public ICollection<CompanyStatDomainModel> GetRecordsByPageSize(int page) { 
  const int pgeSize = 20; 
  var result = _companyStatRepo
    .AllIncluding(c => c.CompanyDomainModel, c => c.RatingDomainModel) 
    .OrderBy(c => c.CompanyStatId)
    .Skip(page * pgeSize)
    .Take(pgeSize)
    .ToList(); 
  return result; 
} 

ENDPOINT

IHttpActionResult GetRecordsByPageSize(int page) { 
  var companyStatService = new CompanyStatService(); 
  return Ok(companyStatService.GetRecordsByPageSize(page)); 
} 

DOMAIN RATING MODEL

 public class RatingDomainModel : IObjectWithState
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [DataMember]
    public int RatingId { get; set; }

    [DataMember]
    public int CompanyId { get; set; }

    [DataMember]
    public int UserId { get; set; }

    [DataMember]
    public int RatingValue { get; set; }

    [DataMember]
    public DateTime CreatedDate { get; set; }

    //[ForeignKey("UserId")]
    [DataMember]
    public virtual UserDomainModel UserDomainModel { get; set; }

    //[ForeignKey("CompanyId")]
    [DataMember]
    public virtual CompanyDomainModel CompanyDomainModel { get; set; }

    [DataMember]
    public virtual ICollection<CompanyStatDomainModel> CompanyStatDomainModels { get; set; }

    [NotMapped]
    public Common.DataObject.State state { get; set; }

    [NotMapped]
    public bool InDb
    {
        get { return this.RatingId != default(int); }
    }

    public object PersistenceEntityId
    {
        get { return this.RatingId; }
    }
}

OUTPUT

Please see below URL to see the results I am getting from the API

1
12
6/11/2015 1:52:46 AM

Popular Answer

Code below was added to WebApiConfig.cs

config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling =    Newtonsoft.Json.ReferenceLoopHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None;
21
6/11/2015 3:03:38 AM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow