मैं xmlserializer को केवल सादे xml कैसे बना सकता हूं?


85

मुझे <?xml version="1.0" encoding="utf-16"?>शुरुआत में और बिना xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"पहले तत्व के , बिना सादे xml प्राप्त करने की आवश्यकता है XmlSerializer। मैं यह कैसे कर सकता हूं?

जवाबों:


211

यह सब एक साथ रखने के लिए - यह पूरी तरह से मेरे लिए काम करता है:

    // To Clean XML
    public string SerializeToString<T>(T value)
    {
        var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
        var serializer = new XmlSerializer(value.GetType());
        var settings = new XmlWriterSettings();
        settings.Indent = true;
        settings.OmitXmlDeclaration = true;

        using (var stream = new StringWriter())
        using (var writer = XmlWriter.Create(stream, settings))
        {
            serializer.Serialize(writer, value, emptyNamespaces);
            return stream.ToString();
        }
    }

1
(var stream = new StringWriter ()) को var stream = new StringWriter () में बदला जा सकता है; कोड विश्लेषण के साथ त्रुटि देता है क्योंकि यह xmlwriter को दो बार निपटाने की कोशिश करता है।
अर्चना

1
@Archna यदि आपने ऐसा किया है, तो StringWriter उस स्थिति में निपटाया नहीं जाएगा जो XmlWriter.Create कॉल एक अपवाद फेंकता है। एक संभावित समाधान जो दुर्भावनापूर्ण XmlWriter लेखकों को शामिल करता है जो एक IDispose कार्यान्वयन करता है जो इस गारंटी के अनुरूप नहीं है कि दो बार निष्पादित करना दूसरी कॉल के लिए कुछ भी नहीं करता है, जिसमें एक प्रयास को पकड़ना होगा और धारा को अंदर की ओर खींचना होगा using( writer ), जैसा कि इस प्रश्न में देखा जा सकता है: stackoverflow.com/a/11192524/2144408
TamaMcGlinn

आप किस प्रकार के पैरामीटर T का उपयोग कर रहे हैं?
जेसपर

25

XmlSerializer.Serializeविधि अधिभार का उपयोग करें जहां आप कस्टम नेमस्पेस निर्दिष्ट कर सकते हैं और वहां से गुजर सकते हैं।

var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
serializer.Serialize(xmlWriter, objectToSerialze, emptyNs);

अशक्त या खाली सरणी चाल नहीं चलेगी


7
कृपया ध्यान दें कि आपको इस उत्तर को @ tobsen के उत्तर के साथ संयोजित करने की आवश्यकता है जो मैं पूछ रहा था - एक बहुत ही साफ xml!
ग्रेजेनियो


0

यह एक स्ट्रिंग के बजाय एक्सएमएल को एक फाइल में लिख देगा। ऑब्जेक्ट टिकट वह वस्तु है जिसे मैं क्रमबद्ध कर रहा हूं।

उपयोग किए गए नामस्थान:

using System.Xml;
using System.Xml.Serialization;

कोड:

XmlSerializerNamespaces emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });

XmlSerializer serializer = new XmlSerializer(typeof(ticket));

XmlWriterSettings settings = new XmlWriterSettings
{
    Indent = true,
    OmitXmlDeclaration = true
};

using (XmlWriter xmlWriter = XmlWriter.Create(fullPathFileName, settings))
{
    serializer.Serialize(xmlWriter, ticket, emptyNamespaces); 
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.