Можете да получите 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