Вы можете получить JsonOutputFormatter
из BindingContext.OutputFormatters
внутри кода вашего контроллера. Это позволяет вам динамически изменять файл SerializerSettings
.
Попробуйте включить using Newtonsoft.Json;
в код контроллера и сделать следующее внутри вашего действия контроллера:
var f = BindingContext.OutputFormatters.FirstOrDefault(
formatter => formatter.GetType() ==
typeof (Microsoft.AspNet.Mvc.Formatters.JsonOutputFormatter))
as Microsoft.AspNet.Mvc.Formatters.JsonOutputFormatter;
if (f != null) {
//f.SerializerSettings.Formatting = Formatting.Indented;
f.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
}
Я включил Formatting = Formatting.Indented
только для своих тестов, потому что результаты сразу видны. Вам это не нужно по причине.
ОБНОВЛЕНО: я создал демонстрационный проект с использованием веб-приложения MVC без аутентификации. Затем я добавил в HomeController
следующий метод
public object TestMethod()
{
var testResult = new {
name = "Test",
value = 123,
nullableProperty = (string) null
};
return testResult;
}
и изменил URL-адрес запуска проекта на Home/TestMethod
и запустил демонстрацию. я мог видеть
{"name":"Test","value":123,"nullableProperty":null}
Вам не нужно добавлять какие-либо дополнительные операторы использования, чтобы использовать код, который я разместил изначально (нужны только стандартные using Microsoft.AspNet.Mvc;
и using System.Linq;
), но код мог бы быть более читабельным, если бы у вас были using Microsoft.AspNet.Mvc.Formatters;
и using Newtonsoft.Json;
. Я добавил операторы использования для Microsoft.AspNet.Mvc.Formatters
и Newtonsoft.Json
и изменил код следующим образом.
public object TestMethod()
{
var testResult = new {
name = "Test",
value = 123,
nullableProperty = (string) null
};
var f = BindingContext.OutputFormatters.FirstOrDefault(
formatter => formatter.GetType() == typeof (JsonOutputFormatter)) as JsonOutputFormatter;
if (f != null) {
f.SerializerSettings.Formatting = Formatting.Indented;
f.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
}
return testResult;
}
Результаты вывода теперь выглядят следующим образом
{
"name": "Test",
"value": 123
}
Стандартный код использует "Newtonsoft.Json"
в версии 6.0.6. Мы можем добавить "Newtonsoft.Json": "8.0.2"
в зависимости, чтобы использовать последнюю версию Newtonsoft.Json
. См. проблему с разрешением косвенных зависимостей, о которой я сообщил в проблеме и которая все еще открыта .
Вы можете загрузить тестовый проект из здесь.
person
Oleg
schedule
04.02.2016