C# 웹 API 반환 유형을 json으로 설정하는 두 가지 방법

高洛峰
풀어 주다: 2017-01-18 09:29:48
원래의
1222명이 탐색했습니다.

웹 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; 
}
로그인 후 복사

방법 2: (만금유 방식)

방법 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; 
} 
}
로그인 후 복사

App_Start에서 WebApiConfig.cs 파일을 찾아 열고 Register(HttpConfiguration config) 메서드를 찾습니다.

다음 코드 추가:

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 중국어 웹사이트를 참고하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿