c# हरण एक्सएमएल सीरियलाइजेशन और नेमस्पेस उपसर्ग




उपसर्ग और मूल शब्द अलग करे (2)

नेमस्पेस उपनाम को नियंत्रित करने के लिए, XmlSerializerNamespaces उपयोग करें।

[XmlRoot("Node", Namespace="http://flibble")]
public class MyType {
    [XmlElement("childNode")]
    public string Value { get; set; }
}

static class Program
{
    static void Main()
    {
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("myNamespace", "http://flibble");
        XmlSerializer xser = new XmlSerializer(typeof(MyType));
        xser.Serialize(Console.Out, new MyType(), ns);
    }
}

यदि आपको रनटाइम पर नेमस्पेस बदलने की आवश्यकता है, तो आप अतिरिक्त रूप से XmlAttributeOverrides उपयोग कर सकते हैं।

मैं सी # के साथ एक रास्ता तलाश रहा हूं जिसे मैं एक वर्ग को एक्सएमएल में क्रमबद्ध कर सकता हूं और एक नामस्थान जोड़ सकता हूं, लेकिन उस नामस्थान को परिभाषित करने वाले उपसर्ग को परिभाषित करता हूं।

आखिरकार मैं निम्नलिखित एक्सएमएल उत्पन्न करने की कोशिश कर रहा हूं:

<myNamespace:Node xmlns:myNamespace="...">
  <childNode>something in here</childNode>
</myNamespace:Node>

मैं DataContractSerializer और XmlSerializer दोनों के साथ जानता हूं, मैं एक नामस्थान जोड़ सकता हूं, लेकिन ऐसा लगता है कि मैं कुछ ऐसा करने के लिए आंतरिक रूप से उपसर्ग उत्पन्न करता हूं, जिसे मैं नियंत्रित नहीं कर पा रहा हूं। क्या मैं इन धारावाहिकों में से किसी एक के साथ इसे नियंत्रित करने में सक्षम हूं (मैं उनमें से किसी एक का उपयोग कर सकता हूं)?

अगर मैं नामस्थानों की पीढ़ी को नियंत्रित करने में सक्षम नहीं हूं, तो मुझे अपना खुद का एक्सएमएल सीरियलाइज़र लिखना होगा, और यदि हां, तो इसे लिखने के लिए सबसे अच्छा क्या है?


स्कीमा से जेनरेट कोड का उपयोग करते समय, जहां नामों के नामस्थान हैं, इस नेमस्पेस ओवरराइड रूट स्तर पर लागू होता है लेकिन अलग-अलग प्रकार के टैग में कक्षा से जुड़े नेमस्पेस होंगे।

मुझे दो अलग-अलग जेनरेट किए गए वर्गों का उपयोग करने की आवश्यकता थी, लेकिन अलग-अलग नाम रिक्त स्थान हैं जिनके आधार पर मैं किस सर्वर से बात कर रहा था (मेरे नियंत्रण में नहीं पूछें)।

मैंने यहां पेश किए गए सभी ओवरराइडों की कोशिश की और आखिरकार एक तरह का ब्रूट फोर्स विधि छोड़ दिया और वास्तव में बहुत अच्छी तरह से काम किया। मैंने जो किया वह एक स्ट्रिंग को क्रमबद्ध किया गया था। फिर नेमस्पेस को बदलने के लिए स्ट्रिंग.रेप्लेस का उपयोग करें और स्ट्रिंगराइटर का उपयोग करके स्ट्रिंग से स्ट्रीम को पोस्ट करें। प्रतिक्रिया पर वही - एक स्ट्रिंग पर कैप्चर करें - नेमस्पेस में हेरफेर करें और स्ट्रिंग लेखक से स्ट्रिंग को deserialize करें।

यह सुरुचिपूर्ण नहीं हो सकता है या सभी फैंसी ओवरराइड का उपयोग नहीं कर सकता है लेकिन यह काम पूरा हो गया है।





xmlserializer