API インターフェイスを作成する場合、Web API はデフォルトでオブジェクトをシリアル化して XML 形式で返します。次に、2 つの方法を示します。
方法 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>
この方法で返される結果はすべて json 型ですが、返される結果が String である場合には欠点があります。 type (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; }
メソッド。 2 は、すべてのインターフェイスで数行のコードを繰り返し記述するよりも、メソッドにカプセル化する方がはるかに便利な方法です。
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 は最も単純ですが、あまりにも致命的です。その場合、メソッド 3 は API インターフェイスでのみ強制終了されます。 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));
追加後のコード
<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 返された結果が 123 などの String 型の場合、返される json は「123」になります。解決策は方法 1 と同じです。
実際、Web API は返されたオブジェクトを xml 形式と json 形式が混在する形式に自動的に変換します。方法 1 と 3 は xml 戻り値を排除し、方法 2 は戻り値をカスタマイズします。
上記は、C# Web API の戻り値の型を json に設定する 2 つの方法の内容です。さらに関連する内容については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。