2015-06-11 16 views
7

Web API'sından alınan alt varlıktan (JSON) erişmeye çalışıyorum. Ancak tarayıcı konsoluna bakarak, alanlar yerine bir referans gösteriyor. Bu alanlara nasıl erişebilirim?WEB API JSON Serileştirme Genelgesi Referansları

AÇISAL JS GÖRÜNÜM

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

SERVİS

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

DERECELENDİRME ALAN 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; } 
    } 
} 

ÇIKIŞ

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

+1

Not: Ben angularjs kodu veya etiketi sanmıyorum buraya çok değer katın. Bu gerçekten ASP.NET Web API'sı ile ilgili bir sorudur ve müşteri kodunuzun ne yazıldığından bağımsız olarak doğru olacaktır. –

+0

Bir yana, API'nize ve müşterinize çok fazla yatırım yaptınız mı? Değilse, bunun yerine bir OData denetleyicisi yapmayı düşünebilirsiniz. OData, tutarlı bir Query String parametresi kullanarak projeksiyonun tanımlanmasına izin vererek bu sorunu zarif bir şekilde ele alır. Ör., Bu durumda '? $ Expand = RatingDomainModel' kullanabilecektiniz. Bu oldukça büyük bir mimari değişimdir, ancak projenin başındaysanız, ek faydalar sağlayabilir. –

+0

Ayrıca, bu belirli son nokta için kontrol cihazınızdan kod gönderebilir misiniz? Şu anda bu nesneleri nasıl sergilediğinizi bilmek faydalı olacaktır. –

cevap

14

Eklendi aşağıda WebApiConfig.cs içine kod

config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None; 
+0

Bu bana çok yardımcı oldu! Bütün veri modelimi parçalamak ve parçalamak üzereydim. Teşekkürler –

+0

no problem @JimK –