【C#】 요청을 JSON으로 받고 JSON 응답

이번에는 업무에서 미경험의 C#을 사용하여 API를 만들 기회가 있었습니다.
여러가지 조사하면서의 작업이었으므로, 같은 상황에 맞는 사람을 향해, 「자신의 경우는 이것으로 할 수 있었어」라고 하는 내용을 써 둡니다. 조금이라도 해결의 도움이 된다고 생각합니다.

자신의 기술


  • VisualStudio는 무엇입니까?
  • .NET이란 무엇입니까?
  • C#는 Java처럼 쓸 수 있겠죠?

  • 라고 하는 레벨의 완전 초보자입니다. 어떻게든 만든 지금도 거의 모르겠습니다.
    잘못된 부분이 있으면 수정하므로 지적해 주시면 감사하겠습니다.

    환경


  • mac
  • Visual Studio Community 2019 for Mac
  • C#

  • 프로젝트 만들기



    Visual Studio를 시작하면 프로젝트의 병아리(템플릿)를 선택하게 되었으므로 .NET Core > 웹 애플리케이션(모델 뷰 컨트롤러)을 선택했습니다.



    3개 위에 있는 「API」에서도 좋았습니다만, 만든 API를 View로 표시하고 싶었으므로 이것을 선택했습니다.

    요청으로 전달되는 JSON을 객체에 저장



    (예) 리퀘스에서 건너오는 JSON


    {
      "name": "なまえ たろう",
      "email":  "[email protected]",
      "favorites": [
        {
          "name": "ランニング",
          "detail": "走ります。"
        },
        {
          "name": "movie",
          "detail": "映画みます。"
        }
      ]
    }
    

    컨트롤러의 병아리



    HomeController.cs
            public IActionResult Index()
            {
                return View();
            }
    

    템플릿을 선택하면 컨트롤러 클래스가 완성되어 있으므로 다음과 같이 추가합니다.

    POST에서 JSON 받기



    HomeController.cs
            [HttpPost]
            public IActionResult Index(RequestJson request)
            {
                return View();
            }
    
    [HttpPost] 를 쓰면, 「/컨트롤러명/메소드명」이라고 하는 URL에 POST 통신으로 리퀘스트가 왔을 때 움직이는 메소드가 됩니다.
    그리고 인수의 RequestJson request는 스스로 만든 클래스입니다. 이렇게 하면 DI적인 기능일까요? .NET 프레임 워크가 좋은 느낌으로 JSON을이 클래스의 멤버 변수에 넣어줍니다. 잘 모르겠습니다.

    다른 언어라도 좋기 때문에, 뭔가의 프레임워크를 사용한 적이 있는 사람이라면, 어쩐지 아는 것은 아닐까요. 저는 Spring Framework나 Laravel을 조금 꺾고 있었습니다만, 같은 느낌이군요.

    JSON을 저장하는 클래스



    RequestJson.cs
    namespace sample.Objects
    {
        [DataContract]
        public class RequestJson
        {
            [DataMember]
            public string name { get; set; }
            [DataMember]
            public string email { get; set; }
            [DataMember]
            public List<Favorite> favorites { get; set; }
    
    
            [DataContract]
            public class Favorite
            {
                [DataMember]
                public string name { get; set; }
                [DataMember]
                public string detail { get; set; }
            }
        }
    }
    

    건너 오는 JSON 형식에 맞게 클래스를 만듭니다.
    그건 그렇고, JSON과 변수를 완전히 맞추지 않아도 오류가 발생하지 않았습니다.
    JSON에는 있지만 클래스에 정의되지 않은 것은 무시됩니다. (당연하지만 변수를 정의하지 않았기 때문에 얻을 수 없습니다)

    JSON 응답



    방금 전의 메소드에 추기·변경



    HomeController.cs
            [HttpPost]
            public IActionResult Index(RequestJson request)
            {
                    //レスポンス生成
                    ResponseJson response = new ResponseJson();
                    response.code = 1;
    
                    return Json(response);
            }
    

    요청을 받는 것처럼 ResponseJson 라는 응답을 위한 클래스를 정의하고 Json 클래스(.NET 표준에서 사용할 수 있는 클래스라고 생각됨)에 넣고 return 하는 것만으로 JSON 형식으로 반환 줬어. 여기 근처도 다른 프레임 워크와 같은 느낌 이군요.

    응답 JSON용 클래스



    ResponseJson.cs
    namespace sample.Objects
    {
        [DataContract]
        public class ResponseJson
        {
            [DataMember]
            public int code { get; set; }
            [DataMember]
            public string message { get; set; }
        }
    }
    

    여기에서는 쓰고 있지 않지만, 요청시와 같이, 정의해 주면 배열이나 네스로 한 오브젝트도 제대로 JSON 형식으로 변환해 줍니다.

    참고



    여러가지 참고로 한 사이트가 있습니다만, 지나치게 기억하고 있지 않습니다. .
    단지 일부이지만 열거합니다.
  • htps : //에서 v.ぁsss d. jp / e tc / c-sha rpj j /
  • h tp // 베비안. 하테나 bぉg. 코m/엔트리/2015/01/21/232536
  • 좋은 웹페이지 즐겨찾기