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:
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(); }
Das zurückgegebene Ergebnis ist Sie 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, den Rückgabetyp anzupassen ( 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; }
Methode 1 erfordert eine Änderung der Konfiguration und die Verarbeitung des JSON-Rückgabewerts vom Typ String, was sehr ist problematisch, es ist besser, das automatische Serialisierungsobjekt in der Web-API nicht zu verwenden, es selbst zu serialisieren und es dann zurückzugeben
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; }
Methode eins ist die einfachste, aber zu tödlich. Alle zurückgegebenen XML-Formate werden zerstört, daher ist Methode drei möglich Beenden Sie einfach die XML-Datei in der API-Schnittstelle und geben Sie JSON zurück.
Schreiben Sie zunächst eine Klasse, um die Rückgabe zu verarbeiten:
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; } }
Fügen Sie den folgenden Code hinzu:
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)); }
Tatsächlich konvertiert die Web-API das zurückgegebene Objekt automatisch in eine Form, in der die Formate XML und JSON nebeneinander existieren. Die Methoden 1 und 3 eliminieren die XML-Rückgabe, während Methode 2 darin besteht, die Rückgabe anzupassen.
Weitere verwandte Artikel zu den beiden Methoden zum Festlegen des C#-Web-API-Rückgabetyps auf JSON finden Sie auf der chinesischen PHP-Website!