आप अपने नियंत्रक के कोड के अंदर BindingContext.OutputFormatters
से JsonOutputFormatter
मिल सकती है। यह आपको गतिशील रूप से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
शामिल बस केवल अपने परीक्षण के लिए, क्योंकि एक परिणाम तुरंत देखते हैं। आपको इसके कारण की आवश्यकता नहीं है।
अद्यतन: मैंने एमवीसी वेब एप्लिकेशन का उपयोग करके कोई प्रमाणीकरण के साथ डेमो प्रोजेक्ट बनाया है। तब मैं HomeController
में जोड़ा metod
public object TestMethod()
{
var testResult = new {
name = "Test",
value = 123,
nullableProperty = (string) null
};
return testResult;
}
निम्नलिखित और Home/TestMethod
को परियोजना के लॉन्च URL बदल गया है और डेमो शुरू कर दिया। मैं देख सकता
{"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;
}
उत्पादन परिणामों संस्करण 6.0.6 में
{
"name": "Test",
"value": 123
}
मानक कोड उपयोग "Newtonsoft.Json"
निम्नलिखित के रूप में अब लग रहा है। हम Newtonsoft.Json
के नवीनतम संस्करण का उपयोग करने के लिए निर्भरताओं में "Newtonsoft.Json": "8.0.2"
जोड़ सकते हैं। अप्रत्यक्ष निर्भरताओं को हल करने में समस्या देखें जो मैंने the issue में रिपोर्ट की थी और जो अभी भी खोला गया है।
आप here से परीक्षण प्रोजेक्ट डाउनलोड कर सकते हैं।
मुझे अपने नियंत्रक विधि के भीतर से BindingContext दिखाई नहीं दे रहा है? यह एएसपीएनईटी 5 के लिए है? – Gillardo
@ उपयोगकर्ता 2736022: कारण का हां। प्रत्येक नियंत्रक कार्रवाई के अंदर आपके पास '' गुण 'HttpContext', 'BindingContext' और इसी तरह के साथ हैं। आप बस अपनी विधि के अंदर 'यह' टाइप कर सकते हैं। 'टाइप' टाइप करने के बाद इंटेलिजेंस आपको 'बाइंडिंग कॉन्टेक्स्ट' सहित 'इस' के सभी गुण दिखाएगा। सी # आपको इस 'बाइंडिंग कॉन्टेक्स्ट' के बजाय 'बाइंडिंग कॉन्टेक्स्ट' लिखने की अनुमति देता है (अनुशंसा करता है)। – Oleg
क्या आप नामस्थान के साथ जांच सकते हैं?यह कहता है कि इसके नियंत्रक में बाइंडिंग कॉन्टेक्स्ट – Gillardo