.NET JSON सीरियलाइज़ेशन के दौरान किसी फ़ील्ड को अनदेखा करना; [XmlIgnore] के समान?


80

मेरे पास एक पीओसीओ क्लास है जो .NET 3.5 sp1 में JSON स्ट्रिंग के रूप में ब्राउज़र को भेजा जा रहा है। मैं केवल डिफ़ॉल्ट JSON क्रमांकन का उपयोग कर रहा हूं और मेरे पास कुछ फ़ील्ड हैं जिन्हें मैं अनदेखा करना चाहता हूं। मैं उन पर [System.Xml.Serialization.XmlIgnore] के समान एक विशेषता डालना चाहता हूं ताकि वे क्रमबद्ध न हों।

जवाबों:


121

मैं अपने मॉडल पर ScriptIgnore विशेषता का उपयोग करता हूँ जैसे:

public class Item
{
    [ScriptIgnore]
    public Item ParentItem { get; set; }
}

इस विशेष परिदृश्य में मुझे जसन धारावाहिक से एक परिपत्र संदर्भ त्रुटि मिल रही थी, इसलिए मैंने बस इसे अनदेखा कर दिया। मैं एसओ पर यहां एक समान प्रश्न पूछ रहा था जब मुझे एक मॉडल और व्यूमॉडल के बीच अंतर पर बदल दिया गया था।


1
क्या होगा अगर इसका POCO नहीं बल्कि एक जेनरेट किया गया EntityModel हो, तो मैं जेनरेट किए गए कोड को एडिट नहीं करना चाहता, क्या जेनरेट किए गए एंटिटी मॉडल में ScriptIgnore विशेषता जोड़ने के लिए वर्कअराउंड है।
खतरनाकमिक्ली

@hazimdikenli आपको इसके लिए आंशिक वर्ग का उपयोग करना पड़ सकता है।
आनंद

11
काम करने के लिए "System.Web.Extensions" के लिए एक संदर्भ जोड़ना न भूलें
Levitikon

1
इससे मुझे अपने toJson (मॉडल) को कुछ अवांछित क्षेत्रों को वापस लाने में मदद मिली, लेकिन आदर्श रूप से एक एपीआई के साथ, आपको क्रॉस एनोटेशन से बचने के लिए एक नया मॉडल और नियंत्रक के साथ एक नया क्षेत्र बनाने की आवश्यकता होगी .. लेकिन बहुत आलसी भी। धन्यवाद +1
पायोटर कुला

27
[ScriptIgnore] 

तुम्हारा हुकेरी है


1
यह वास्तव में "हकल बियरर" है, लेकिन मैं आपको प्रयास और फिल्म के लिए एक +1 दूंगा। :)
ब्रायन रे

8
मूल उत्तर सही है, वह कहते हैं "हकलबेरी", "हकल बियरर" नहीं। imsdb.com/scripts/Tombstone.html
heisenberg

5
... "हकलबेरी फिन" के रूप में - सर्वोत्कृष्ट "हर आदमी" का एक संदर्भ, जो सहज रूप से "सही काम करने" का प्रयास करता है - एक सच्चा दोस्त जिसे आप हमेशा गिन सकते हैं ... इसलिए "मैं आपका हकलबेरी हूं" , जिसका अर्थ है "आप मुझ पर भरोसा कर सकते हैं"।
जॉन हॉलिडे सेप

2

आपको केवल [ScriptIgnore(ApplyToOverrides = true)]अपने टेक्स्ट टेम्पलेट (.tt) फ़ाइल में जोड़ना होगा ।

यहां मेरे टेक्स्ट टेम्प्लेट का एक हिस्सा पहले

#>
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
<#

एक बार जब मैंने कोड को codeStringGeneratorअपनी कक्षाओं के ऊपर लाइन में डाला तो ऑटो उत्पन्न हुआ और इस तरह देखा:

[ScriptIgnore(ApplyToOverrides = true)]
public virtual ICollection<Currency> Currencies { get; set; }

मुझे UsingDirectivesसम्मिलित करने के लिए फ़ंक्शन को संशोधित करने की भी आवश्यकता थी"using System.Web.Script.Serialization;"


ApplyToOverridesएक आभासी संपत्ति पर बहुत महत्वपूर्ण प्रतीत होता है
टॉड

1

संपत्ति को आंतरिक के रूप में सेट करें। आपकी संरचना पर निर्भर करता है, हालांकि। ध्यान में रखिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.