Asp.net JSON不返回与个人相关的工作分配(Visual studio 2012,MVC)
嗨,我正试图用一个人和与此人相关的技能返回JSON 我有一个班上的人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;
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;
}