2010-06-02 17 views
5

मैं इस तरह एक वस्तु,मैं एक्सएमएल सीरिएलाइज़र में टैग कैसे रोकूं और खाली करूं?

public class UserObj 
{ 
    public string First {get; set;} 
    public string Last {get; set;} 
    public addr Address {get; set;} 

} 

public class addr 
{ 
    public street {get; set;} 
    public town {get; set;} 
} 

अब जब मैं इसे और सड़क और शहर पर XmlSerializer का उपयोग खाली मैं XML आउटपुट में इस मिल रहे हैं, है

<Address /> 

वहाँ एक रास्ता नहीं करने के लिए है इस खाली टैग आउटपुट?

धन्यवाद

+2

आपको खाली टैग से बचने की आवश्यकता क्यों है? वे वैध एक्सएमएल हैं, है ना? –

उत्तर

2

आप IXmlSerializable को लागू करने और अपने दम पर क्रमबद्धता दिनचर्या को लागू कर सकते हैं। इस तरह, आप तत्व से बच सकते हैं।

एक यहाँ उदाहरण: विधि इस हस्ताक्षर के साथ मौजूद है

public bool ShouldSerializeAddress() 
{ 
    return Address != null 
     && !String.IsNullOrEmpty(Address.street) 
     && !String.IsNullOrEmpty(Address.town); 
} 

हैं, तो serializer कॉल करेगा: http://paltman.com/2006/jul/03/ixmlserializable-a-persistable-example/

3

आपको तय करना है या नहीं, पता संपत्ति श्रृंखलाबद्ध किया जाना चाहिए एक ShouldSerializeAddress विधि लागू कर सकते हैं यह संपत्ति serializing से पहले।

public bool AddressSpecified 
{ 
    get 
    { 
     return Address != null 
      && !String.IsNullOrEmpty(Address.street) 
      && !String.IsNullOrEmpty(Address.town); 
    } 
} 
0

प्रॉपर्टी पर एक DefaultValue विशेषता जोड़कर रिक्त मान को खत्म कर सकते हैं:

वैकल्पिक रूप से, आप एक AddressSpecified संपत्ति है जो एक ही भूमिका है लागू कर सकते हैं। जब संपत्ति का मान डिफ़ॉल्ट मान से मेल खाता है, तो यह क्रमबद्ध नहीं होता है। Serialization को खत्म करने के लिए, आप डिफ़ॉल्ट मान को शून्य पर सेट करते हैं। यहां एक उदाहरण दिया गया है:


using System.ComponentModel; 
public class UserObj 
{ 
    public string First {get; set;} 
    public string Last {get; set;} 

    [DefaultValue(null)] 
    public addr Address {get; set;} 

} 
0

मुझे लगता है कि पता फ़ील्ड को शून्य मान असाइन करना चाहिए।

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