2016-02-04 24 views

cevap

0

Bir seçenek, bu soruda açıklanan şekilde özel Json sonuç türü oluşturmaktır: Using JSON.NET as the default JSON serializer in ASP.NET MVC 3 - is it possible?. Sonra ana kontrolör üzerindeki bool var dosya ve devre dışı Null kullanarak özel Json sonuç yapmak ve hatta doğrudan seçeneğini geçmesine kullanabilirsiniz: Eğer kumandanın kodun içine BindingContext.OutputFormatters den JsonOutputFormatter alabilirsiniz

return Json(data, ignoreNulls: true); 
0

. 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.

+1

BindingContext'i denetleyici yöntemimin içinden göremiyorum. ASPNET5 için bu mu? – Gillardo

+0

@ 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

+0

İçinde bulunduğu ad alanı ile kontrol edebilir misiniz?Benim denetleyicinin BindingContext – Gillardo

İlgili konular