Wenn eine Web-API eine API-Schnittstelle schreibt, besteht die Standardrückgabe darin, Ihr Objekt zu serialisieren und in XML-Form zurückzugeben. Wie können Sie es also als JSON zurückgeben?
Methode 1: (Konfiguration ändern Methode)
Suchen Sie die Datei Global.asax und fügen Sie einen Satz in der Methode Application_Start() hinzu:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
Nach der Änderung:
<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>
Zurück so Die Ergebnisse sind alle vom Typ JSON, aber es gibt einen Nachteil. Wenn das zurückgegebene Ergebnis vom Typ String ist, z. B. 123, wird der zurückgegebene JSON zu „123“ Die Lösung besteht darin, dies zu tun Definieren Sie selbst den Rückgabetyp (der Rückgabetyp ist 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; }
In Methode Eins müssen Sie die Konfiguration ändern und die JSON-Rückgabe verarbeiten Wert des String-Typs. Es ist sehr mühsam. Warum nicht das automatische Serialisierungsobjekt in der Web-API verwenden, es selbst serialisieren und dann zurückgeben? Methode 2 ist die Methode, die ich der Reihe nach empfehle es nicht wiederholt in jede Schnittstelle zu schreiben. Diese wenigen Codezeilen werden in eine Methode gekapselt, sodass sie viel bequemer zu verwenden ist.
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; }
Methode drei: (die problematischste Methode)
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; }
Schreiben Sie zunächst eine Klasse, um die Rückgabe zu verarbeiten:
Suchen Sie die Datei WebApiConfig.cs in App_Start, Öffnen und Suchen Sie die Register(HttpConfiguration config)-Methode
und fügen Sie den folgenden Code hinzu:
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; } }
Der hinzugefügte Code lautet wie folgt:
var jsonFormatter = new JsonMediaTypeFormatter(); config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
Tatsächlich konvertiert die Web-API das zurückgegebene Objekt automatisch in ein Formular, in dem die XML- und JSON-Formate nebeneinander existieren. Die Methoden 1 und 3 eliminieren die XML-Rückgabe, während Methode 2 darin besteht, die Rückgabe anzupassen.
<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>