2010-03-23 14 views
16

का उपयोग कर कोई उपसर्ग के साथ डिफ़ॉल्ट नामस्थान कैसे जोड़ूं, मैं एक XML दस्तावेज़ जेनरेट करने का प्रयास कर रहा हूं जिसमें XmlSerializer का उपयोग करके उपसर्ग के बिना डिफ़ॉल्ट नामस्थान शामिल है, उदा।मैं XMLSerializer

<?xml version="1.0" encoding="utf-8" ?> 
<MyRecord ID="9266" xmlns="http://www.website.com/MyRecord"> 
    <List> 
     <SpecificItem> 

निम्नलिखित कोड का उपयोग करना ...

string xmlizedString = null; 
MemoryStream memoryStream = new MemoryStream(); 
XmlSerializer xs = new XmlSerializer(typeof(ExportMyRecord)); 
XmlSerializerNamespaces xmlnsEmpty = new XmlSerializerNamespaces(); 
xmlnsEmpty.Add(string.Empty, string.Empty); 
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); 
xs.Serialize(xmlTextWriter, myRecord, xmlnsEmpty); 
memoryStream = (MemoryStream)xmlTextWriter.BaseStream; 
xmlizedString = this.UTF8ByteArrayToString(memoryStream.ToArray()); 

और वर्ग संरचना ...

[Serializable] 
[XmlRoot("MyRecord")] 
public class ExportMyRecord 
{ 
    [XmlAttribute("ID")] 
    public int ID { get; set; } 

अब, मैं विभिन्न विकल्पों की कोशिश की है ...

XmlSerializer xs = new XmlSerializer 
        (typeof(ExportMyRecord),"http://www.website.com/MyRecord"); 

या ...

[XmlRoot(Namespace = "http://www.website.com/MyRecord", ElementName="MyRecord")] 

मुझे देता है ...

<?xml version="1.0" encoding="utf-8"?> 
<q1:MylRecord ID="9266" xmlns:q1="http://www.website.com/MyRecord"> 
    <q1:List> 
     <q1:SpecificItem> 

मैं के रूप में यह एक तीसरी पार्टी प्रदाता जा रहा है एक्सएमएल जरूरत उपसर्ग के बिना नाम स्थान है और वे अन्य सभी विकल्पों अस्वीकार करते हैं।

उत्तर

29

ये लीजिए:

ExportMyRecord instance = GetInstanceToSerializeFromSomewhere(); 
XmlSerializerNamespaces xmlnsEmpty = new XmlSerializerNamespaces(); 
xmlnsEmpty.Add(string.Empty, "http://www.website.com/MyRecord"); 
var serializer = new XmlSerializer(
    instance.GetType(), 
    "http://www.website.com/MyRecord" 
); 
+0

सही समाधान! – viperguynaz

+0

सिर्फ यह ध्यान रखना चाहता था कि आप xmlnsEmpty का उपयोग नहीं कर रहे हैं और छोड़ा जा सकता है। Sermlize का ओवरलोड जो XmlSerializerNamespaces लेता है स्ट्रिंग.empty मान का उपयोग नहीं करता है। – arviman

+0

शानदार! 'q q1: root xmlns: someAttr = "urn" q1: someAttr = "urn>" के साथ समस्याएं भी थीं जब तक कि मैंने यह फिक्स नहीं देखा। मुझे – Eon

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