2013-04-12 192 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