웹 API가 API 인터페이스를 작성할 때 기본 반환은 개체를 직렬화하여 XML 형식으로 반환하는 것입니다. 그러면 어떻게 json으로 반환하게 할 수 있습니까?
방법 1: (구성 변경) 메서드)
Global.asax 파일을 찾아 Application_Start() 메서드에 문장을 추가합니다:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
수정 후:
<br>protected void Application_Start() <br>{ <br>AreaRegistration.RegisterAllAreas(); <br>WebApiConfig.Register(GlobalConfiguration.Configuration); <br>FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); <br>RouteConfig.RegisterRoutes(RouteTable.Routes); <br>// 使api返回为jsonGlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();} <br>
여기서 반환된 결과 way는 json 유형이지만 반환된 결과가 123과 같은 문자열 유형인 경우 반환된 json은 "123"이 됩니다.
해결책은 반환을 사용자 정의하는 것입니다. type (반환 유형은 HttpResponseMessage)
public HttpResponseMessage PostUserName(User user) { String userName = user.userName; HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(userName,Encoding.GetEncoding("UTF-8"), "application/json") }; return result; }
방법 2: (Taiwan Balm 방법)
방법 1에서는 구성을 변경하고 String 유형의 json 반환 값을 처리해야 합니다. 매우 번거로운 작업이므로 웹 API에서 자동 직렬화 개체를 사용하는 대신 직접 직렬화한 다음
public HttpResponseMessage PostUser(User user) { JavaScriptSerializer serializer = new JavaScriptSerializer(); string str = serializer.Serialize(user); HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") }; return result; }
를 반환하는 방법은 이러한 몇 가지 항목을 반복적으로 작성하지 않기 위해 더 권장하는 방법입니다. 각 인터페이스의 코드 줄을 캡슐화하여 메서드에 사용하는 것이 훨씬 더 편리합니다.
public static HttpResponseMessage toJson(Object obj) { String str; if (obj is String ||obj is Char) { str = obj.ToString(); } else { JavaScriptSerializer serializer = new JavaScriptSerializer(); str = serializer.Serialize(obj); } HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") }; return result; }
방법 3: (가장 번거로운 방법)
방법 1은 가장 간단하지만 너무 치명적입니다. 그러면 반환된 모든 XML 형식이 삭제됩니다. 세 번째 방법은 API 인터페이스에서 xml을 종료하고 json을 반환할 수만 있습니다.
먼저 반환을 처리하는 클래스를 작성합니다.
public class JsonContentNegotiator : IContentNegotiator { private readonly JsonMediaTypeFormatter _jsonFormatter; public JsonContentNegotiator(JsonMediaTypeFormatter formatter) { _jsonFormatter = formatter; } public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters) { var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json")); return result; } }
App_Start에서 WebApiConfig.cs 파일을 찾아 열고 Register를 찾습니다. ( HttpConfiguration config) 메소드
다음 코드 추가:
var jsonFormatter = new JsonMediaTypeFormatter(); config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
추가된 코드는 다음과 같습니다.
<br>public static void Register(HttpConfiguration config) <br>{ <br>config.Routes.MapHttpRoute( <br>name: "DefaultApi", <br>routeTemplate: "api/{controller}/{action}/{id}", <br>defaults: new { id = RouteParameter.Optional } <br>);var jsonFormatter = new JsonMediaTypeFormatter(); onfig.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));} <br>
메서드 3 반환된 결과가 String 유형인 경우, 예를 들어 123을 반환하면 json은 "123"이 되며 해결 방법은 방법 1과 동일합니다.
실제로 웹 API는 반환된 개체를 xml과 json 형식이 공존하는 형식으로 자동 변환합니다. 방법 1과 3은 xml 반환을 제거하는 반면, 방법 2는 반환을 사용자 지정하는 것입니다.
위는 C# 웹 API 반환 유형을 json으로 설정하는 두 가지 방법에 대한 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!