2013-04-12 118 views
2

這是我的模型。JSON對象顯示爲空

public class User 
{ 
    public string Id { get; set; } 
    public string Username { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Password { get; set; } 
    public string Headline { get; set; } 
    public virtual ICollection<Address> Addresses { get; set; } 
    public virtual ICollection<Phonenumber> Phonenumbers { get; set; } 
    public virtual ICollection<Email> Emails { get; set; } 
    public virtual ICollection<Position> Positions { get; set; } 
} 

這是GET方法。

// GET api/App 
    public IEnumerable<User> GetUsers() 
    { 
     db.Configuration.ProxyCreationEnabled = false; 
     return db.Users.AsEnumerable(); 
    } 

我禁用了代理創建,因爲顯然實體框架和seriliazation存在某種問題。

當我goto localhost:12345/api/App /時,它返回下面的JSON對象。正如你會注意到地址字段和一直到位置顯示爲空。

[{"$id":"1","Id":"1","Username":"Bob","FirstName":"Foo","LastName":"Bar","Password":"123","Headline":"Something","Addresses":null,"Phonenumbers":null,"Emails":null,"Positions":null}] 

但我不明白爲什麼它是空的,因爲它用來顯示它們。我可以證實它的存在,數據,當我轉到本地主機:12345/API /應用/ 1就顯示在其中:

{"$id":"1","Addresses":[{"$id":"2","Id":"3","Uaddress":"Test address","Country":"Fantasy Land","Zipcode":"0000","Cycle":0,"UserId":"3","User":{"$ref":"1"}}],"Phonenumbers":[{"$id":"3","Id":"2","Number":"12345678","Cycle":0,"UserId":"3","User":{"$ref":"1"}}],"Emails":[{"$id":"4","Id":"2","Uemail":"[email protected]","Cycle":0,"UserId":"3","User":{"$ref":"1"}}],"Positions":[{"$id":"5","Company":{"$id":"6","Id":"2","Name":"Bobs ApS","Type":"Bobs","Industry":"Magic","Size":"1337"},"Id":"2","Title":"CEO","Iscurrent":true,"CompanyId":"2","UserId":"1","User":{"$ref":"1"}}],"Id":"1","Username":"bob","FirstName":"Foo","LastName":"Bar","Password":"1234","Headline":"Something"} 

正如你會看到領域都充滿了數據。任何想法爲什麼它不顯示,當我試圖讓所有用戶?

回答

3

現在你已經禁用了代理,懶惰加載並沒有爲你獲取子實體。您需要特別要求:

return db.Users.Include(x => x.Addresses).Include(x => x.Positions).AsEnumerable(); 
+0

非常感謝,感謝您的快速回答。你會不會知道爲什麼有EF這個seriliazation錯誤導致我禁用代理? – brk

+0

我認爲(?)這是因爲Navigable實體可以互相引用,所以它是無限的序列化?用戶轉到地址,但地址轉到擁有用戶地址的用戶 - 不能被序列化。我可能在這裏錯了,雖然... –

+0

好聽起來reansonable。再次感謝您的快速回復。祝你有美好的一天:) – brk