2009-10-15 11 views
6

तो मेरे पास है एक xml यह करने के लिए इसी तरह की एक संरचना है कि:सी # आंशिक अक्रमांकन

<MyObject> 
    <PropertyA>Value</PropertyA> 
    <PropertyB>Value</PropertyB> 
    <PropertyC>Value</PropertyC> 
    <ArrayOfOtherObject> 
     <OtherObject> 
      <PropertyX>Value</PropertyX> 
      <PropertyY>Value</PropertyY> 
      <PropertyZ>Value</PropertyZ> 
     </OtherObject> 
     <OtherObject> 
      <PropertyX>Value</PropertyX> 
      <PropertyY>Value</PropertyY> 
      <PropertyZ>Value</PropertyZ> 
     </OtherObject> 
     <OtherObject> 
      <PropertyX>Value</PropertyX> 
      <PropertyY>Value</PropertyY> 
      <PropertyZ>Value</PropertyZ> 
     </OtherObject> 
    </ArrayOfOtherObject> 
</MyObject> 

वहाँ एक रास्ता है कि मैं MyObject deserialize सकते हैं, लेकिन नहीं ArrayOfOtherObject है? और फिर बाद में जब आवश्यक हो तो ArrayOfOtherObject का आलसी लोड करें?

मैं आमतौर पर XmlDeserialization का उपयोग करता हूं, लेकिन AFAIK यह हमेशा पूरी चीज लोड करता है।

धन्यवाद!

+2

ईमानदारी से कहूं तो, जब तक कि डेटा की मात्रा बहुत बड़ा है आप बंद बेहतर होगा सरल दृष्टिकोण के लिए जा रहा है, और deserialize यह सब। –

+0

+1 अच्छा सवाल कार्लो – toddmo

उत्तर

2

आप विशेष निर्माता का उपयोग कर सकते है जो बाइनरी अक्रमांकन कार्यक्षमता द्वारा मान्यता प्राप्त है: -: http://geekswithblogs.net/marcel/archive/2006/05/19/78989.aspx

+0

क्या वह 'बाइनरीफॉर्मेटर' नहीं है? एक्सएमएल आमतौर पर 'IXmlSerializable' है, जो * बहुत * अलग दिखता है। –

+0

हां, मार्क, आप सही हैं लेकिन IXmlSerializable को आसानी से ReadXml विधि के माध्यम से बढ़ाया जा सकता है। –

+1

तो मैं इस बारे में कैसे जाउंगा? मैं वास्तव में इसके साथ नोब हूं, क्योंकि मैंने केवल नियमित deserialization (पूरे ऑब्जेक्ट deserialize) किया है और केवल XmlIgnore का उपयोग किया है। मैंने एमएसडीएन पर इसका उपयोग कैसे किया, लेकिन यह जटिल था और काम नहीं कर सका (कभी-कभी मैं अपने अत्यधिक जटिल उदाहरणों के लिए एमएसडीएन से नफरत करता हूं)। – Carlo

0

आप एक्सएमएल deserializing के बारे में बात कर रहे हैं

protected MyObject(SerializationInfo info, StreamingContext context) 
{ 
//here some elements you can load right now, and some other to store in so-to-say string in order to load later 
} 

एक्सएमएल के मामले में यहां कस्टम क्रमबद्धता का एक उदाहरण है क्योंकि इसे पार्स किया गया है ताकि आपको संपूर्ण xml फ़ाइल को मेमोरी में लोड न करना पड़े, या कंक्रीट ऑब्जेक्ट तक पहुंचने का प्रयास करते समय इसे deserializing?

यह रूप में डोम के लिए विरोध SAX के एक कार्यान्वयन को देखने के लिए मदद कर सकता है:

http://www.saxproject.org/

+0

मुझे MyObject को deserialize करने की आवश्यकता है, लेकिन ArrayOfOtherObject नहीं। और बाद में यदि उपयोगकर्ता द्वारा अनुरोध किया गया है, तो मुझे ArrayOfOtherObject लोड करना होगा, लेकिन शुरुआत में केवल MyObject। – Carlo

+0

एक और विचार यह है कि एक आरडीबीएमएस आपको आवश्यकतानुसार इस डेटा को संग्रहीत करने और पुनर्प्राप्त करने के लिए बेहतर होगा। आप इस डेटा को एक रिलेशनल डेटाबेस में आयात कर सकते हैं और फिर LINQ से SQL का उपयोग करके इसे क्वेरी कर सकते हैं उदाहरण के लिए (जो मुझे याद आती है आलसी लोडिंग का उपयोग करता है)। – PabloC

संबंधित मुद्दे