2009-10-26 19 views
18

मेरे पास ऑब्जेक्ट्स की एक सरणी है जिसे मैं एक्सएमएल के रूप में क्रमबद्ध करना चाहता हूं। इन ऑब्जेक्ट्स को एक्सएमएल नोड नाम सेट करने के लिए एनोटेट किया गया है लेकिन मैं सोच रहा था कि एक्सएमएल रूट नोड का नाम कैसे सेट करें।XmlSerializing एक सरणी रूट रूट नोड नाम कैसे सेट करें?

कोड इस तरह दिखता है:

// create list of items 
List<ListItem> list = new List<ListItem>(); 
list.Add(new ListItem("A1", new Location(1, 2))); 
list.Add(new ListItem("A2", new Location(2, 3))); 
list.Add(new ListItem("A3", new Location(3, 4))); 
list.Add(new ListItem("A4<&xyz>", new Location())); 

// serialise 
XmlSerializer ser = new XmlSerializer(typeof(ListItem[])); 
FileStream os = new FileStream(@"d:\temp\seri.xml", FileMode.Create); 
ser.Serialize(os, list.ToArray()); 
os.Close(); 

उत्पादन इस तरह दिखता है:

<?xml version="1.0"?> 
<ArrayOfPlace xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Place> 
    <Placename>A1</Placename> 
    <Location> 
     <Lat>1</Lat> 
     <Long>2</Long> 
    </Location> 
    </Place> 
    <Place> 
    ... 

ListItem को प्लेस नाम दिया गया है एक XmlElement एनोटेशन का उपयोग कर, लेकिन कैसे कर सकते हैं मैंने 'ArrayOfPlace' नोड का नाम बदलने के लिए रूट नोड का नाम सेट किया है?

उत्तर

28

इस प्रयास करें:

XmlSerializer ser = new XmlSerializer(
    typeof(ListItem[]), 
    new XmlRootAttribute("CustomRootName")); 
+0

ध्यान दें कि बाद में पुन: उपयोग के लिए धारावाहिक को कैश करना आवश्यक है, अन्यथा एक गंभीर स्मृति रिसाव होगा। देखें [StreamReader और XmlSerializer का उपयोग कर मेमोरी लीक] (https://stackoverflow.com/questions/23897145/memory-leak-using-streamreader-and-xmlserializer/) – dbc

0

बस अपने आप के साथ-साथ एक समाधान मिल गया।

XmlSerializer को तत्काल करते समय रूट नोड का नाम सेट करना संभव है। निचे देखो।

XmlSerializer ser = new XmlSerializer(typeof(ListItem[]), new XmlRootAttribute("AllPlaces")); 
संबंधित मुद्दे