Ich verstehe, dass die ASP.NET-Web-API Json.NET nativ zum (De-) Serialisieren von Objekten verwendet. Gibt es jedoch eine Möglichkeit, ein JsonSerializerSettings
Objekt anzugeben , das verwendet werden soll?
Was wäre zum Beispiel, wenn ich type
Informationen in die serialisierte JSON-Zeichenfolge aufnehmen möchte ? Normalerweise würde ich Einstellungen in den .Serialize()
Aufruf einfügen, aber die Web-API erledigt dies im Hintergrund. Ich kann keine Möglichkeit finden, Einstellungen manuell einzufügen.
c#
asp.net-web-api
json.net
Richard Neil Ilagan
quelle
quelle
Sie können
JsonSerializerSettings
für jedes angebenJsonConvert
und einen globalen Standard festlegen .Single
JsonConvert
mit Überlastung:// Option #1. JsonSerializerSettings config = new JsonSerializerSettings { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore }; this.json = JsonConvert.SerializeObject(YourObject, Formatting.Indented, config); // Option #2 (inline). JsonConvert.SerializeObject(YourObject, Formatting.Indented, new JsonSerializerSettings() { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore } );
Globale Einstellung mit Code
Application_Start()
in Global.asax.cs:JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented, ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore };
Referenz: https://github.com/JamesNK/Newtonsoft.Json/issues/78
quelle
HttpConfiguration
stattdessen wie in der Antwort von carlosfigueira verwenden, da die in konfigurierten EinstellungenJsonConvert.DefaultSettings
nicht beachtet wurden.JsonSerializerSettings
für mich funktioniert. Ich konnte die HttpCOnfiguration nicht zum Laufen bringen, sie kam mit anderen Assembly-Methoden (Hangifre) zurück und wusste nicht warum.formHiddenField.Value = JsonConvert.SerializeObject(listaCursos, Formatting.Indented, jsonSerializerSettings);
und JQuery verwenden, um den Wert abzurufenvar data = $('#formHiddenField').val();
?Antwort ist das Hinzufügen dieser 2 Codezeilen zur Global.asax.cs Application_Start-Methode
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All;
Referenz: Umgang mit kreisförmigen Objektreferenzen
quelle