2011-06-28 17 views
8

मैं उन वर्गों को परिभाषित करना चाहता हूं जो System.Xml.Serialization.XmlSerializer का उपयोग कर निम्न XML उत्पन्न करेंगे। मैं आइटम सूची प्राप्त करने के लिए संघर्ष कर रहा हूं, ऐसे गुणों के साथ जिनमें 'आइटम' तत्वों के लिए बच्चे का कंटेनर तत्व नहीं है।गुणों और बच्चों के साथ तत्व के लिए ऑब्जेक्ट को क्रमबद्ध करें

<?xml version="1.0" ?> 
<myroot> 
    <items attr1="hello" attr2="world"> 
     <item id="1" /> 
     <item id="2" /> 
     <item id="3" /> 
    </items> 
</myroot> 
+0

यदि मेरी समझ सही है, तो क्या आप आइटम क्लास नहीं बना सकते हैं जिसमें आइटम क्लास का संग्रह है? – Novice

+0

यह सही है, लेकिन आइटम तत्व में गुण होना चाहिए। – Sprintstar

+0

हां, क्या हम वस्तुओं की कक्षा के अंदर भी अन्य गुणों को परिभाषित नहीं कर सकते हैं? – Novice

उत्तर

18

XmlSerializer साथ बातें या तो सूचियों या वे सदस्य हैं। कि आप की आवश्यकता करने के लिए:

[XmlRoot("myroot")] 
public class MyRoot { 
    [XmlElement("items")] 
    public MyListWrapper Items {get;set;} 
} 

public class MyListWrapper { 
    [XmlAttribute("attr1")] 
    public string Attribute1 {get;set;} 
    [XmlAttribute("attr2")] 
    public string Attribute2 {get;set;} 
    [XmlElement("item")] 
    public List<MyItem> Items {get;set;} 
} 
public class MyItem { 
    [XmlAttribute("id")] 
    public int Id {get;set;} 
} 

उदाहरण के साथ:

var ser = new XmlSerializer(typeof(MyRoot)); 
var obj = new MyRoot 
{ 
    Items = new MyListWrapper 
    { 
     Attribute1 = "hello", 
     Attribute2 = "world", 
     Items = new List<MyItem> 
     { 
      new MyItem { Id = 1}, 
      new MyItem { Id = 2}, 
      new MyItem { Id = 3} 
     } 
    } 
}; 
ser.Serialize(Console.Out, obj); 

उत्पन्न करता है जो:

<myroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:// 
www.w3.org/2001/XMLSchema"> 
    <items attr1="hello" attr2="world"> 
    <item id="1" /> 
    <item id="2" /> 
    <item id="3" /> 
    </items> 
</myroot> 

आप निश्चित रूप से अगर आप चाहते हैं xsi/xsd नाम स्थान उपनाम निकाल सकते हैं।

+0

वाह, भयानक काम मार्क। यह XmlArrayItem की तुलना में केवल XmlElement के रूप में रैपर में 'आइटम' संग्रह को चिह्नित कर रहा था, जिसे मैं याद कर रहा था। आपको बहुत - बहुत धन्यवाद! – Sprintstar

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

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