2011-01-29 11 views
8

अभी भी .NET के साथ XML serialization के बारे में एक और सवाल।दस्तावेज़ रूट पर Deserialise XML सरणी

मुझे किसी तृतीय पक्ष से एक्सएमएल स्ट्रिंग प्राप्त हो रही है और इसे न्यूनतम झगड़े के साथ नेट क्लास में पार्स करना है। मैं xsd का उपयोग नहीं करना चाहता क्योंकि मेरा एक्सएमएल बहुत आसान है और मुझे वर्बोज़ कक्षाएं पसंद नहीं हैं जो इसे थूकती हैं। मुझे deserialisation काम की मूल बातें मिल गई है, लेकिन एक रूट स्तर सरणी के साथ संघर्ष कर रहा हूँ।

समस्या XML के रूप में नीचे है:

<people> 
    <person> 
    <id>1234</id> 
    </person> 
    <person> 
    <id>4567</id> 
    </person> 
</people> 

मैं इसे कैसे deserialise करने के लिए मेरी सी # लोग वर्ग पर गुण मैप करते हैं?

यही वह है जो मैं काम करना चाहता हूं लेकिन ऐसा नहीं है।

[Serializable()] 
[XmlRootAttribute("people", Namespace = "", IsNullable = false)] 
public class People 
{ 
    [XmlArrayItem(typeof(Person), ElementName = "person")] 
    public List<Person> Persons; 
} 

अगर मैं करने के लिए XML वध:

<result> 
    <people> 
    <person> 
     <id>1234</id> 
    </person> 
    <person> 
     <id>4567</id> 
    </person> 
    </people> 
</result> 

फिर इसके नीचे के वर्ग परिभाषा के साथ काम करता है लेकिन यह बहुत ही गलत लगता है।

[Serializable()] 
[XmlRootAttribute("result", Namespace = "", IsNullable = false)] 
public class People 
{ 
    [XmlArray(ElementName = "people")] 
    [XmlArrayItem(typeof(Person), ElementName = "person")] 
    public List<Person> Persons; 
} 
+0

आपको '[Serializable] ', btw की आवश्यकता नहीं है - इसका उपयोग' XmlSerializer' द्वारा नहीं किया जाता है –

उत्तर

9
[XmlElement("person")] 
public List<Person> Persons; 

हालांकि वास्तव में मैं पसंद करते हैं:

private List<Person> persons; 
[XmlElement("person")] 
public List<Person> Persons {get{return persons??(persons=new List<Person>());}} 

के रूप में इस है:

  • टाल सूची निर्माण, जब आप किसी भी लोग
  • कोई जरूरत नहीं है के लिए " "सूची संपत्ति पर सेट करें (इसकी आवश्यकता नहीं है)
संबंधित मुद्दे