webentwicklung-frage-antwort-db.com.de

Legen Sie die globalen Standardeinstellungen für den JSON-Serializer fest

Ich versuche, die globalen Serializer-Einstellungen wie folgt in meinem global.asax.

var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
formatter.SerializerSettings = new JsonSerializerSettings
{
    Formatting = Formatting.Indented,
    TypeNameHandling = TypeNameHandling.Objects,
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};

Wenn Sie ein Objekt mit dem folgenden Code serialisieren, werden die globalen Serializer-Einstellungen nicht verwendet.

return new HttpResponseMessage(HttpStatusCode.OK)
{
    Content = new StringContent(JsonConvert.SerializeObject(page))
};

Ist es nicht möglich, die globalen Serializer-Einstellungen so festzulegen, oder fehlt mir etwas?

32
Marcus

Einstellen des JsonConvert.DefaultSettings hat den Trick gemacht.

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    Formatting = Formatting.Indented,
    TypeNameHandling = TypeNameHandling.Objects,
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};
70
Marcus

Akzeptierte Antwort hat bei mir nicht funktioniert. In .netcore habe ich damit gearbeitet ...

services.AddMvc(c =>
                 {
                 ....
                 }).AddJsonOptions(options => {
                     options.SerializerSettings.Formatting = Formatting.Indented;
                     ....
                 })
4
Michael

Führen Sie in Ihrer Aktion einfach die folgenden Schritte aus, damit Sie eine inhaltsbezogene Antwort zurückgeben und auch Ihre Formatierungseinstellungen wirksam werden.

return Request.CreateResponse(HttpStatusCode.OK, page);
2
Kiran Challa

Sie sind richtig, wo Sie den Serializer einstellen. Dieser Serializer wird jedoch verwendet, wenn die Anforderung an Ihre Site mit einem angeforderten JSON-Inhaltstyp erfolgt. Es ist nicht Teil der Einstellungen, die beim Aufrufen von SerializeObject verwendet werden. Sie können dies umgehen, indem Sie die global.asax definierten JSON-Serialisierungseinstellungen über eine Eigenschaft verfügbar machen.

public static JsonSerializerSettings JsonSerializerSettings
{
    get
    {
        return GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
    }
}

Verwenden Sie dann diese Eigenschaft, um die Serialisierungseinstellungen festzulegen, wenn Sie die Serialisierung in Ihren Controllern ausführen:

return new HttpResponseMessage(HttpStatusCode.OK)
{
    Content = new StringContent(JsonConvert.SerializeObject(page, WebApiApplication.JsonSerializerSettings))
};
1
Scott Corbett