ホームページ  >  記事  >  バックエンド開発  >  C# Web API の戻り値の型を json に設定する 2 つの方法

C# Web API の戻り値の型を json に設定する 2 つの方法

高洛峰
高洛峰オリジナル
2017-01-18 09:29:481205ブラウズ

API インターフェイスを作成する場合、Web API はデフォルトでオブジェクトをシリアル化して XML 形式で返します。次に、2 つの方法を示します。
方法 1: (設定メソッドを変更する)

検索します。 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 型ですが、返される結果が String 型の場合は欠点があります。 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も扱う必要があるので、Web 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 インターフェイス内の XML を破棄することしかできません。
最初に戻りを処理するクラスを作成します:

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と同じです。


実際、Web API は返されたオブジェクトを xml 形式と json 形式が混在する形式に自動的に変換します。方法 1 と 3 は xml 戻り値を排除し、方法 2 は戻り値をカスタマイズします。

C# Web API の戻り値の型を json に設定する 2 つの方法に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。