Asp.net JSON不返回与个人相关的工作分配(Visual studio 2012,MVC)

Asp.net JSON不返回与个人相关的工作分配(Visual studio 2012,MVC),asp.net,asp.net-web-api,Asp.net,Asp.net Web Api,嗨,我正试图用一个人和与此人相关的技能返回JSON 我有一个班上的人 public class Person { [Key] public int personID { get; set; } public string firstName { get; set; } public string lastName { get; set; } public int age { get; set; } public string role { get;

嗨,我正试图用一个人和与此人相关的技能返回JSON

我有一个班上的人

public class Person
{
    [Key]
    public int personID { get; set; }
    public string firstName { get; set; }
    public string lastName { get; set; }
    public int age { get; set; }
    public string role { get; set; }
    public virtual ICollection<Skill> Skills { get; set; }

}
数据库上下文

    public class ConsultantContext : DbContext
{
    public DbSet<Person> Persons { get; set; }
    public DbSet<Skill> Skill { get; set; }

}
公共类ConsultantContext:DbContext { 公共DbSet Persons{get;set;} 公共数据库集技能{get;set;} } 我用一些数据填充upp

公共类PersonInit:DropCreateDatabaseIfModelChanges { 受保护的覆盖无效种子(ConsultantContext上下文) {

        var skills = new List<Skill>
        {

            new Skill { skillID = 1, personID = 1, title = "Javascript" },
            new Skill { skillID = 2, personID = 1, title = "jQuery" },
            new Skill { skillID = 3, personID = 1, title = "ASP.NET" }
        };
        skills.ForEach(s => context.Skills.Add(s));
        context.SaveChanges();


        var persons = new List<Person>
        {

            new Person { personID = 1, firstName = "Name1",   lastName = "Lastname1", age = 30, role = "Programmer" },
            new Person { personID = 2, firstName = "Name2",   lastName = "Lastname2", age = 30, role = "Designer" },
            new Person { personID = 3, firstName = "Name3",   lastName = "Lastname3", age = 30, role = "Manager" }
        };
        persons.ForEach(s => context.Persons.Add(s));
        context.SaveChanges();




    }

}
var skills=新列表
{
新技能{skillID=1,personID=1,title=“Javascript”},
新技能{skillID=2,personID=1,title=“jQuery”},
新技能{skillID=3,personID=1,title=“ASP.NET”}
};
skills.ForEach(s=>context.skills.Add);
SaveChanges();
var persons=新列表
{
新人{personID=1,firstName=“Name1”,lastName=“Lastname1”,年龄=30,角色=“程序员”},
新人{personID=2,firstName=“Name2”,lastName=“Lastname2”,年龄=30,role=“Designer”},
新人{personID=3,firstName=“Name3”,lastName=“Lastname3”,年龄=30,role=“Manager”}
};
persons.ForEach(s=>context.persons.Add);
SaveChanges();
}
}
我有一个叫Person的控制器

  public class PersonController : ApiController
{
    private ConsultantContext db = new ConsultantContext();

    // GET api/Person
    public IEnumerable<Person> GetPeople()
    {
        return db.Persons.AsEnumerable();
    }

    // GET api/Person/5
    public Person GetPerson(int id)
    {
        Person person = db.Persons.Find(id);
        if (person == null)
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
        }

        return person;
    }

    // PUT api/Person/5
    public HttpResponseMessage PutPerson(int id, Person person)
    {
        if (ModelState.IsValid && id == person.personID)
        {
            db.Entry(person).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                return Request.CreateResponse(HttpStatusCode.NotFound);
            }

            return Request.CreateResponse(HttpStatusCode.OK);
        }
        else
        {
            return Request.CreateResponse(HttpStatusCode.BadRequest);
        }
    }

    // POST api/Person
    public HttpResponseMessage PostPerson(Person person)
    {
        if (ModelState.IsValid)
        {
            db.Persons.Add(person);
            db.SaveChanges();

            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, person);
            response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = person.personID }));
            return response;
        }
        else
        {
            return Request.CreateResponse(HttpStatusCode.BadRequest);
        }
    }

    // DELETE api/Person/5
    public HttpResponseMessage DeletePerson(int id)
    {
        Person person = db.Persons.Find(id);
        if (person == null)
        {
            return Request.CreateResponse(HttpStatusCode.NotFound);
        }

        db.Persons.Remove(person);

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            return Request.CreateResponse(HttpStatusCode.NotFound);
        }

        return Request.CreateResponse(HttpStatusCode.OK, person);
    }

    protected override void Dispose(bool disposing)
    {
        db.Dispose();
        base.Dispose(disposing);
    }
}
public类PersonController:ApiController
{
private ConsultantContext db=新ConsultantContext();
//获取api/人
公共IEnumerable GetPeople()
{
返回db.Persons.AsEnumerable();
}
//获取api/人/5
公众人物GetPerson(内部id)
{
Person-Person=db.Persons.Find(id);
if(person==null)
{
抛出新的HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
}
返回人;
}
//放置api/人/5
公共HttpResponseMessagePutPerson(int id,Person)
{
if(ModelState.IsValid&&id==person.personID)
{
db.Entry(person.State=EntityState.Modified;
尝试
{
db.SaveChanges();
}
catch(DbUpdateConcurrencyException)
{
返回请求.CreateResponse(HttpStatusCode.NotFound);
}
返回Request.CreateResponse(HttpStatusCode.OK);
}
其他的
{
返回请求.CreateResponse(HttpStatusCode.BadRequest);
}
}
//张贴空气污染指数/人
公共HttpResponseMessage PostPerson(个人)
{
if(ModelState.IsValid)
{
db.Persons.Add(人);
db.SaveChanges();
HttpResponseMessage response=Request.CreateResponse(HttpStatusCode.Created,person);
response.Headers.Location=newURI(Url.Link(“DefaultApi”,new{id=person.personID}));
返回响应;
}
其他的
{
返回请求.CreateResponse(HttpStatusCode.BadRequest);
}
}
//删除api/Person/5
公共HttpResponseMessageDeletePerson(内部id)
{
Person-Person=db.Persons.Find(id);
if(person==null)
{
返回请求.CreateResponse(HttpStatusCode.NotFound);
}
db.人员。移除(人员);
尝试
{
db.SaveChanges();
}
catch(DbUpdateConcurrencyException)
{
返回请求.CreateResponse(HttpStatusCode.NotFound);
}
返回请求.CreateResponse(HttpStatusCode.OK,person);
}
受保护的覆盖无效处置(布尔处置)
{
db.Dispose();
基地。处置(处置);
}
}
现在来看看在fiddler中使用http:/localhost/api/Person时返回JSON的问题:

它返回一个空[]

有人能帮我把JSON和personID、姓名、姓氏、角色和技能(属于此人)一起拿回来吗

问候

试试这个

    public IEnumerable<Person> GetPeople()
    {
        var skills = db.Skill;
        var people = db.Persons;
        people.ForEach(person => person.Skills = skills.FindAll(skill => skill.personID == person.personID));

        return people;
    }
public IEnumerable GetPeople()
{
var-skills=db.Skill;
var people=db.people;
people.ForEach(person=>person.Skills=Skills.FindAll(skill=>skill.personID==person.personID));
还人,;
}

你能为API本身提供代码吗?你是想做MVC还是WCF?http:/localhost/API/Person在Person以Person objectMVC的形式传递文本字段的值后没有值,如果我去掉它返回JSON的技能,我想向persons添加技能并返回json,这样我就可以用jquery映射到javascript敲除。不要看帖子如果你看这篇文章,我不应该这么做?我道歉@rubin,我以为你在尝试WCF,所以忽略数据:)我的错,应该写ASP.NET MVC=)它可以工作并只返回人的JSON,但我想添加所有技能并返回JSON,这样我就可以用jQuery映射将其映射到javascript敲除,所以我需要它是JSON名称,skill1,skill2,skill3]etcI编辑了我的答案,我不知道它是否会起作用,因为我是从头开始做的,但你应该知道我要做的基本上是加载每个上下文,然后遍历每个人,并以这种方式将技能分配给他们。我以前没有看到你加载技能
    public IEnumerable<Person> GetPeople()
    {
        var skills = db.Skill;
        var people = db.Persons;
        people.ForEach(person => person.Skills = skills.FindAll(skill => skill.personID == person.personID));

        return people;
    }