Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebAPI在开始时添加类标题_C#_Json_Asp.net Mvc_Rest_Json.net - Fatal编程技术网

C# WebAPI在开始时添加类标题

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上激活它 这里

我通过ASP.NETWebAPI序列化了对JSON的RESTAPI响应。 这是我的结果:

我通过以下链接访问此结果:
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"
        }
      ]
    }