ASP.NET Web API: JSON序列化循环引用

问题描述 投票:12回答:1

我正在通过ASP.NET Web API检索一个JSON对象图。我试图从一个子实体中访问属性。然而,当查看浏览器的控制台时,它显示了一个类似于 "JSON对象图 "的信息。参考 ($ref)到对象,而不是将该对象的属性序列化。如何获得这些属性的访问权?

ANGULAR 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>

服务内容

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)); 
} 

评分域模式

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; }
  }
}

输出

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

asp.net json.net entity-framework-6 asp.net-web-api2 json-serialization
1个回答
21
投票

在WebApiConfig.cs中添加了以下代码。

config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling =    Newtonsoft.Json.ReferenceLoopHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None;
© www.soinside.com 2019 - 2024. All rights reserved.