Angesichts der folgenden Klasse,
public class Result
{
public bool Success { get; set; }
public string Message { get; set; }
}
Ich gebe eines davon in einer Controller-Aktion wie folgt zurück:
return Json(new Result() { Success = true, Message = "test"})
Mein clientseitiges Framework erwartet jedoch, dass diese Eigenschaften Erfolg und Nachricht in Kleinbuchstaben sind. Ist dies eine Möglichkeit, diesen Gedanken beim normalen Json-Funktionsaufruf zu erreichen, ohne dass die Eigenschaftsnamen in Kleinbuchstaben angegeben werden müssen?
asp.net-mvc
json
James Hughes
quelle
quelle
Das Ändern des Serializers ist einfach, wenn Sie die Web-API verwenden. Leider verwendet MVC selbst
JavaScriptSerializer
keine Option, um dies für die Verwendung von JSON.Net zu ändern.James 'Antwort und Daniels Antwort geben Ihnen die Flexibilität von JSON.Net, bedeuten jedoch, dass Sie überall dort, wo Sie normalerweise arbeiten würden
return Json(obj)
, zureturn new JsonNetResult(obj)
oder ähnlich wechseln müssen, was sich bei einem großen Projekt als Problem erweisen könnte und auch nicht sehr flexibel ist, wenn Sie ändern Ihre Meinung zu dem Serializer, den Sie verwenden möchten.Ich habe beschlossen, den
ActionFilter
Weg zu gehen . Mit dem folgenden Code können Sie eine beliebige AktionJsonResult
ausführen und einfach ein Attribut anwenden, um JSON.Net (mit Eigenschaften in Kleinbuchstaben) zu verwenden:Sie können dies sogar so einrichten, dass es automatisch auf alle Aktionen angewendet wird (mit nur dem geringfügigen Leistungseinbruch einer
is
Prüfung):FilterConfig.cs
Der Code
quelle
Mit meiner Lösung können Sie jede gewünschte Eigenschaft umbenennen.
Ich habe hier und auf SO einen Teil der Lösung gefunden
Damit ich das in meinem Controller tun kann
In meinem Modell kann ich jetzt haben:
Beachten Sie, dass Sie jetzt die
JsonPropertyAttribute
für jede Eigenschaft festlegen müssen, die Sie serialisieren möchten.quelle
Obwohl es eine alte Frage ist, wird die Hoffnung unter dem Code-Snippet für andere hilfreich sein.
Ich habe unten mit MVC5 Web API.
quelle
Sie können diese Einstellung hinzufügen
Global.asax
, und sie funktioniert überall.quelle