【C#】 요청을 JSON으로 받고 JSON 응답
9347 단어 JSON초보자VisualStudio2019C#
여러가지 조사하면서의 작업이었으므로, 같은 상황에 맞는 사람을 향해, 「자신의 경우는 이것으로 할 수 있었어」라고 하는 내용을 써 둡니다. 조금이라도 해결의 도움이 된다고 생각합니다.
자신의 기술
라고 하는 레벨의 완전 초보자입니다. 어떻게든 만든 지금도 거의 모르겠습니다.
잘못된 부분이 있으면 수정하므로 지적해 주시면 감사하겠습니다.
환경
프로젝트 만들기
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.csnamespace 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.csnamespace sample.Objects
{
[DataContract]
public class ResponseJson
{
[DataMember]
public int code { get; set; }
[DataMember]
public string message { get; set; }
}
}
여기에서는 쓰고 있지 않지만, 요청시와 같이, 정의해 주면 배열이나 네스로 한 오브젝트도 제대로 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.csnamespace 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.csnamespace sample.Objects
{
[DataContract]
public class ResponseJson
{
[DataMember]
public int code { get; set; }
[DataMember]
public string message { get; set; }
}
}
여기에서는 쓰고 있지 않지만, 요청시와 같이, 정의해 주면 배열이나 네스로 한 오브젝트도 제대로 JSON 형식으로 변환해 줍니다.
참고
여러가지 참고로 한 사이트가 있습니다만, 지나치게 기억하고 있지 않습니다. .
단지 일부이지만 열거합니다.
{
"name": "なまえ たろう",
"email": "[email protected]",
"favorites": [
{
"name": "ランニング",
"detail": "走ります。"
},
{
"name": "movie",
"detail": "映画みます。"
}
]
}
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Index(RequestJson request)
{
return View();
}
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; }
}
}
}
방금 전의 메소드에 추기·변경
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 형식으로 변환해 줍니다.
참고
여러가지 참고로 한 사이트가 있습니다만, 지나치게 기억하고 있지 않습니다. .
단지 일부이지만 열거합니다.
Reference
이 문제에 관하여(【C#】 요청을 JSON으로 받고 JSON 응답), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/youstr/items/cf9971867d596434d5f8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)