बस कक्षा के बजाय वापस आने के लिए एक इंटरफ़ेस बनाएं।
public interface IMyViewModel {
string MyPublicProperty { get; set; }
}
फिर, इंटरफ़ेस, नहीं वर्ग एक वर्ग है कि इंटरफ़ेस विरासत
public class MyViewModel : IMyViewModel {
public string MyPublicProperty { get; set; }
public string MyNotSoPublicProperty { get; set; }
}
बना सकते हैं और वापस जाने के नियंत्रक कार्रवाई
public JsonResult MyJson(){
IMyViewModel model = new MyViewModel();
return Json(model);
}
में और जिसके परिणामस्वरूप JSON
हो जाएगा
{
'MyPublicProperty': ''
}
क्लाइंट-साइड स्क्रिप्टिंग में चुनौतियों में से एक यह है कि यदि आप अपनी कक्षाएं बदल रहे हैं, तो आपको पता नहीं है कि आप क्लाइंट-साइड कार्यान्वयन को नष्ट कर रहे हैं या नहीं। यदि आप अपने JSON में इंटरफ़ेस प्रकारों का उपयोग करते हैं, तो आप समझते हैं कि यदि आप इंटरफ़ेस बदलते हैं, तो आप ऐसा कुछ कर रहे हैं जो संभावित रूप से क्लाइंट साइड कार्यान्वयन को मार रहा हो। और यह आपको क्लाइंट पक्ष को व्यर्थ में दोबारा जांचने से बचाता है यदि आप ऐसा कुछ बदल रहे हैं जो इंटीफेस में नहीं है (इस प्रकार क्रमबद्ध नहीं किया जा रहा है)।
इसके अलावा, कई बार, आपके व्यू मॉडल्स में बड़े संग्रह या जटिल प्रकार हो सकते हैं जिन्हें आप क्लाइंट को आउटपुट नहीं करना चाहते हैं। इन्हें उस जानकारी को क्रमबद्ध या एक्सपोज़ करने में काफी समय लग सकता है जो क्लाइंट कोड में नहीं है। इंटरफेस का उपयोग करना यह जानने के लिए अधिक पारदर्शी बना देगा कि आउटपुट में क्या हो रहा है।
इसके अलावा, किसी प्रॉपर्टी पर [ScriptIgnore] जैसे गुणों का उपयोग केवल एक विशिष्ट परिदृश्य (जावास्क्रिप्ट सीरियलाइजेशन) पर लागू होता है जो आपको उसी समस्या का सामना करने के लिए मजबूर करता है यदि आप उदाहरण के लिए एक्सएमएल को क्रमबद्ध कर रहे हैं। यह अनावश्यक रूप से आपके व्यूमोडल्स को कई विशेषताओं के साथ कूड़ेगा। उनमें से कितने वास्तव में आप चाहते हैं? Intefaces का उपयोग कहीं भी लागू होता है और अतिरिक्त विशेषताओं के साथ कोई व्यूमोडेल को भंग करने की आवश्यकता नहीं है।
स्रोत
2014-03-31 08:10:28
अधिकतर उत्तर विशेषता का उपयोग कर रहे हैं या जो भी हो। मैं सिर्फ serializing के दौरान कुछ सार्वजनिक संपत्तियों को बाहर करना चाहता हूँ। मैं JSON.NET की तलाश में हूं जैसा कि @ चार्लीनो द्वारा सुझाया गया है लेकिन उसे रास्ता नहीं मिला। यह मामला है: मेरे पास 'त्रुटि' संपत्ति है जो त्रुटि तब होती है जब त्रुटि उत्पन्न होती है। क्लाइंट साइड संदेश दिखाने के लिए पहले इस के लिए जांच करेगा अन्यथा मॉडल की बाकी संपत्ति प्रदर्शित करेगा। जब कोई त्रुटि नहीं होती है, तो यह '{...," त्रुटि ": null}' प्रस्तुत करेगी! – CallMeLaNN