C# WebAPI在开始时添加类标题
我通过ASP.NETWebAPI序列化了对JSON的RESTAPI响应。 这是我的结果: 我通过以下链接访问此结果:C# WebAPI在开始时添加类标题,c#,json,asp.net-mvc,rest,json.net,C#,Json,Asp.net Mvc,Rest,Json.net,我通过ASP.NETWebAPI序列化了对JSON的RESTAPI响应。 这是我的结果: 我通过以下链接访问此结果:http://192.168.2.35:55281/api/Students。因此,我想让我的JSON格式以类标题开头,例如: "Students": [ { "Id": 18, "Type": "Sayısal", "Class_Id": 9 } ] 但不幸的是,正如您从顶部的链接中看到的,我没有学生的标题。如何在我的Web API上激活它 这里
http://192.168.2.35:55281/api/Students
。因此,我想让我的JSON格式以类标题开头,例如:
"Students": [
{
"Id": 18,
"Type": "Sayısal",
"Class_Id": 9
}
]
但不幸的是,正如您从顶部的链接中看到的,我没有学生的标题。如何在我的Web API上激活它
这里是我的控制器:
public class StudentsController : ApiController
{
private DBClassroomEntities db = new DBClassroomEntities();
// GET: api/Students
public IQueryable<Student> GetStudent()
{
return db.Student;
}
// GET: api/Students/5
[ResponseType(typeof(Student))]
public IHttpActionResult GetStudent(int id)
{
Student student = db.Student.FirstOrDefault(s=>s.Id==id);
if (student == null)
{
return NotFound();
}
return Ok(student);
}
// PUT: api/Students/5
[ResponseType(typeof(void))]
public IHttpActionResult PutStudent(int id, Student student)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != student.Id)
{
return BadRequest();
}
db.Entry(student).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!StudentExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
// POST: api/Students
[ResponseType(typeof(Student))]
public IHttpActionResult PostStudent(Student student)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Student.Add(student);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = student.Id }, student);
}
// DELETE: api/Students/5
[ResponseType(typeof(Student))]
public IHttpActionResult DeleteStudent(int id)
{
Student student = db.Student.Find(id);
if (student == null)
{
return NotFound();
}
db.Student.Remove(student);
db.SaveChanges();
return Ok(student);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
private bool StudentExists(int id)
{
return db.Student.Count(e => e.Id == id) > 0;
}
}
公共类学生控制器:ApiController
{
私有DBClassroomEntities db=新的DBClassroomEntities();
//获取:api/学生
公共IQueryable GetStudent()
{
返回db.Student;
}
//获取:api/Students/5
[响应类型(类型(学生))]
公共IHttpActionResult GetStudent(内部id)
{
Student=db.Student.FirstOrDefault(s=>s.Id==Id);
如果(学生==null)
{
返回NotFound();
}
返回Ok(学生);
}
//PUT:api/Students/5
[响应类型(typeof(void))]
公共IHttpActionResult PutStudent(内部id,学生)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
如果(id!=学生id)
{
返回请求();
}
db.Entry(student.State=EntityState.Modified;
尝试
{
db.SaveChanges();
}
catch(DbUpdateConcurrencyException)
{
如果(!StudentExists(id))
{
返回NotFound();
}
其他的
{
投掷;
}
}
返回状态码(HttpStatusCode.NoContent);
}
//职位:api/学生
[响应类型(类型(学生))]
公共IHttpActionResult博士后(学生)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
db.Student.Add(学生);
db.SaveChanges();
返回CreatedAtRoute(“DefaultApi”,new{id=student.id},student);
}
//删除:api/Students/5
[响应类型(类型(学生))]
公共IHttpActionResult DeleteStudent(内部id)
{
Student=db.Student.Find(id);
如果(学生==null)
{
返回NotFound();
}
db.Student.Remove(学生);
db.SaveChanges();
返回Ok(学生);
}
受保护的覆盖无效处置(布尔处置)
{
如果(处置)
{
db.Dispose();
}
基地。处置(处置);
}
私有bool StudentExists(内部id)
{
返回db.Student.Count(e=>e.Id==Id)>0;
}
}
创建一个新类学生列表
:
public class StudentList
{
public List<Student> Students { get; set; }
}
此方法返回的JSON类似于以下内容:
{
"Students": [
{
"Id": 18,
"Type": "Sayısal",
"Class_Id": 9,
"Group_Id": 1,
"FName": "Hüseyin",
"LName": "Biçen"
},
{
"Id": 20,
"Type": "Yabancı Dil",
"Class_Id": 7,
"Group_Id": 6,
"FName": "Hasan",
"LName": "Naser"
}
]
}
您试图做的是更改您在api/Students方法中返回的响应类型,创建模型类型以匹配您请求的内容,并返回该模型(如果需要,查看AutoMapper以了解如何促进此过程),不必有学生的类标题,这使得反序列化变得更加困难。您当前的json格式很好。您喜欢这样做有什么具体原因吗?@arlanschouwstra是的,我想这样做,以便在Android上更轻松地解析我的模型。@HalilŞahin这会使解析更轻松吗?除非您从同一URL返回不同的有效负载,并依赖响应中的某些属性来决定如何处理字符串。顺便说一句,你在问题中发布的不是JSON。不能有这样的顶级属性。JSON字符串必须具有单个根项,可以是对象,也可以是array@HalilŞahin如果要在Students
属性中返回结果,可以编写returnok(new{Students=someListOfStudents})代码>。这将返回一个有效的JSON字符串
// GET: api/Students
[ResponseType(typeof(StudentList))]
public IHttpActionResult GetStudents()
{
StudentList studentList = new StudentList()
{
Students = db.Student.ToList();
}
return Ok(studentList);
}
{
"Students": [
{
"Id": 18,
"Type": "Sayısal",
"Class_Id": 9,
"Group_Id": 1,
"FName": "Hüseyin",
"LName": "Biçen"
},
{
"Id": 20,
"Type": "Yabancı Dil",
"Class_Id": 7,
"Group_Id": 6,
"FName": "Hasan",
"LName": "Naser"
}
]
}