웹 API가 API 인터페이스를 작성할 때 기본 반환은 개체를 직렬화하여 XML 형식으로 반환하는 것입니다. 그러면 어떻게 json으로 반환하게 할 수 있습니까?
방법 1: (구성 변경) method)
Global.asax 파일을 찾아 Application_Start() 메서드에 문장을 추가합니다:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
수정 후:
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); // 使api返回为json GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); }
이렇게 반환된 결과는 모두 json 유형이지만 반환된 결과가 123과 같은 문자열 유형인 경우 반환된 json은 "123"이 됩니다. 해결 방법은 반환 유형을 사용자 정의하는 것입니다. 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; }
방법 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 형식이 삭제되므로 방법 3은 API만 사용할 수 있습니다. 인터페이스 kill xml 및 return 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; } }
다음 코드 추가:
var jsonFormatter = new JsonMediaTypeFormatter(); config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); var jsonFormatter = new JsonMediaTypeFormatter(); config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter)); }
방법 3 반환된 결과가 123과 같은 String 유형인 경우 반환된 json은 " 123" 의 경우 해결책은 방법 1과 동일합니다.
실제로 웹 API는 반환된 개체를 xml과 json 형식이 공존하는 형식으로 자동 변환합니다. 방법 1과 3은 xml 반환을 제거하는 반면, 방법 2는 반환을 사용자 지정하는 것입니다.
C# 웹 API 반환 유형을 json으로 설정하는 두 가지 방법에 대한 자세한 관련 기사는 PHP 중국어 웹사이트를 참고하세요!