>  기사  >  백엔드 개발  >  C# 웹 API 반환 유형을 json으로 설정하는 두 가지 방법

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

黄舟
黄舟원래의
2017-01-19 10:39:391261검색

웹 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)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.