. dinamik olarak'un SerializerSettings
değiştirmesini sağlar.
kontrolör kodunda using Newtonsoft.Json;
dahil etmek ve denetleyici eylem içine aşağıdakileri yapmaya çalışın:
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;
}
Sadece sadece benim testler için Formatting = Formatting.Indented
dahil, bir anında sonuçları görmek için. Buna neden gerek yok.
GÜNCELLENMİŞ: Hiçbir kimlik doğrulaması olmadan MVC Web Uygulamasını kullanarak demo projeyi oluşturdum. Sonra metoduna
public object TestMethod()
{
var testResult = new {
name = "Test",
value = 123,
nullableProperty = (string) null
};
return testResult;
}
aşağıdaki HomeController
eklenen ve Home/TestMethod
projenin lansmanı URL'sini değiştirdi ve demo başladı. Ben Sen O (tek sadece standart using Microsoft.AspNet.Mvc;
ve using System.Linq;
sahip gerek) başlangıçta yayınlandığı kodu kullanma ifadeleri kullanarak herhangi bir ek eklemek gerekmez
{"name":"Test","value":123,"nullableProperty":null}
görebiliyordu, ama kod eğer daha okunabilir olabilir using Microsoft.AspNet.Mvc.Formatters;
ve using Newtonsoft.Json;
olacaktır. Ben Microsoft.AspNet.Mvc.Formatters
ve Newtonsoft.Json
için kullanan ifadeleri eklendi ve sürüm 6.0.6 yılında
{
"name": "Test",
"value": 123
}
standart kod kullanımı "Newtonsoft.Json"
şöyle şimdi görünüyor aşağıdakilere
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;
}
çıkış sonuçlarını kod güncellenmiştir. Newtonsoft.Json
'un en son sürümünü kullanmak için "Newtonsoft.Json": "8.0.2"
bağımlılıkları ekleyebiliriz. the issue'da bildirdiğim ve hala açılmış olan dolaylı bağımlılıkların çözümüyle ilgili problemi görün.
Test projesini here'dan indirebilirsiniz.
BindingContext'i denetleyici yöntemimin içinden göremiyorum. ASPNET5 için bu mu? – Gillardo
@ user2736022: Nedeni evet. Her denetleyici eyleminin içinde 'HttpContext',' BindingContext' vb. Bu yöntemi kendi yönteminizin içine yazabilirsiniz. '' Yazdıktan sonra 'intellysense 'BindingContext' dahil olmak üzere' '' bu özelliklerin tüm özelliklerini gösterecektir. C#, "this.BindingContext" yerine "BindingContext" yazmanıza izin verir (önerir). – Oleg
İçinde bulunduğu ad alanı ile kontrol edebilir misiniz?Benim denetleyicinin BindingContext – Gillardo