Xmlserializer'ın yalnızca düz xml'yi serileştirmesini nasıl sağlayabilirim?


86

<?xml version="1.0" encoding="utf-16"?>Başlangıçta ve xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"ilk elementte olmadan düz xml almam gerekiyor XmlSerializer. Nasıl yapabilirim?

Yanıtlar:


216

Hepsini bir araya getirmek için - bu benim için mükemmel çalışıyor:

    // 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 ()) kullanılması, var stream = new StringWriter () olarak değiştirilebilir; Xmlwriter'ı iki kez atmaya çalıştığı için kod analizinde hata verir.
Archna

1
@Archna Bunu yaptıysanız, XmlWriter.Create çağrısının bir istisna atması durumunda StringWriter atılmayacaktır. Dispose uygulamasının ikinci çağrı için iki kez çalıştırılmasının hiçbir şey yapmadığı garantisine uymayan bir IDispose uygulaması yapan kötü niyetli XmlWriter yazarlarını kapsayan olası bir çözüm, using( writer )bu soruda görülebileceği gibi, bir deneme yakalama ve akışını null olarak ayarlamayı içerir : stackoverflow.com/a/11192524/2144408 .
TamaMcGlinn

T tip parametresini ne için kullanıyorsunuz?
Jesper

25

XmlSerializer.SerializeÖzel ad alanları belirtebileceğiniz ve bunu iletebileceğiniz yöntem aşırı yüklemesini kullanın .

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

boş veya boş diziyi geçmek hile yapmaz


7
Lütfen sorduğum şeyi elde etmek için bu yanıtı @ tobsen'in cevabı ile birleştirmeniz gerektiğini unutmayın - gerçekten temiz bir xml!
Grzenio


0

Bu, XML'i bir dize yerine bir dosyaya yazar. Nesne bileti, serileştirdiğim nesnedir.

Kullanılan ad alanları:

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

Kod:

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); 
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.