2009-12-10 11 views
5

मैं एक्सएमएल कि मैं नहीं बदल सकते दे दिया है और मैं एक कस्टम वर्ग के लिए यह deserialize की जरूरत है:एक्सएमएल को कई नेस्टेड आइटमों के साथ deserialize कैसे करें?

<Person> 
    <Addresses> 
     <MainAddress> 
      <Country /> 
      <City /> 
     </MainAddress> 
     <AdditionalAddress> 
      <Country /> 
      <City /> 
     </AdditionalAddress> 
     <AdditionalAddress> 
      <Country /> 
      <City /> 
     </AdditionalAddress> 
     ... other additional addresses 
    </Addresses> 
    ... other elements 
</Person> 

तब मैं deserialize:

XmlSerializer serializer = new XmlSerializer(typeof(Person), namespace); 
Person person = serializer.Deserialize(stream) as Person;  

deserializer ठीक काम करता है के मामले में सरल तत्वों deserialized कर रहे हैं । जब तत्व पतों की तरह मैं अपने वर्ग पर IXmlSerializable लागू यहाँ की तरह है: link text

समस्या यह है कि reader.ReadElementContentAsString() जटिल तत्वों के साथ नहीं किया जा सकता है।

[XmlRoot("Adressess")] 
public class Adressess 
{ 
    [XmlElement(ElementName = "MainAddress")] 
    public MainAddress Main { get; set; } 

    [XmlElement(ElementName = "AdditionalAddress")] 
    public List<AdditionalAddress> AdditionalAddresses { get; set; } 
} 

[XmlRoot("MainAddress")] 
public class MainAddress 
{ 
    public string Country { get; set; } 
    public string City { get; set; } 
} 

[XmlRoot("AdditionalAddress")] 
public class AdditionalAddress 
{ 
    public string Country { get; set; } 
    public string City { get; set; } 
} 

उत्तर

3

Adressess वर्ग इस तरह से घोषित किया जाना चाहिए।

उदाहरण:

[System.Xml.Serialization.XmlRootAttribute(Namespace = "some namespace")] 
class Person {...} 

[System.Xml.Serialization.XmlRootAttribute(Namespace = "some namespace")] 
class MainAddress{...} 
+0

ध्यान दें कि प्रकार- नाम प्रासंगिक है, तो उदाहरण के लिए नहीं है MainAddress प्रॉपर्टी को मेनएड्रेसस्टोर या किसी भी वर्ग में लागू किया जा सकता है (मुझे लगता है कि कभी-कभी गुणों और प्रकारों के नाम साझा करने में भ्रमित होता है)। यह कंकाल वर्गों के लिए बहुत महत्वपूर्ण नहीं है, जिसका एकमात्र उद्देश्य क्रमशः क्रमबद्धता समर्थन है। –

+0

मैंने अभी तक संपत्ति नामों को कक्षा के नामों से अलग करने के लिए संपादित किया है। मुझे यकीन नहीं है कि अलग मुख्य एड्रेस और अतिरिक्त एड्रेस कक्षाएं वास्तव में आवश्यक हैं या नहीं। मैं चाहता था कि वे अलग-अलग XmlRoot नाम से नाराज हो जाएं। – PanJanek

+0

मैं काम नहीं करता हूं। MainAddress आबादी है लेकिन अतिरिक्त एड्रेस नहीं हैं। – jlp

0

इसके अलावा, अगर जड़ ऑब्जेक्ट प्रकार एक नाम स्थान है, आप एक ही नाम स्थान नेस्टेड प्रकार के लिए उपयोग करना चाहिए:

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