JSON对象显示为null

时间:2013-04-12 13:38:15

标签: c# json entity-framework asp.net-web-api poco

这是我的模特。

    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的某种问题。

当我转到localhost:12345 / api / App /时,它返回以下JSON对象。正如您将注意到Addresses字段和Positions的所有方式都显示为null。

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

但是我不明白为什么它是null,因为它曾用于显示它们。我可以确认它在那里,数据,当我转到localhost:12345 / api / App / 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":"bob@example.com","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"}

正如您将看到该字段都填写了数据。当我试图吸引所有用户时,有什么想法没有显示出来吗?

1 个答案:

答案 0 :(得分:3)

现在您已禁用代理,Lazy Loading不会为您提取子实体。您需要具体询问:

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