2009-07-16 34 views
9

XmlSerializer.Serialize kullanıyorum ve satır sonları ve gereksiz boşluklar üretir. Nasıl önlenir?XML, gereksiz boşluklar ve satır sonları olmadan nasıl serileştirilir? (.NET)

+0

Eski, ancak bir XmlWriter veya TextWriter kullanıp kullanmadığınızı fark ediyorum. Benim deneyimime göre, XmlWriter varsayılan olarak biçimlendirmeye sahip değil. Bu mantıklı, çünkü biçimlendirmenin önemli olmadığı bir belge yazdığını biliyor, metin yazarı ise düz metin yazıyor. – Timothy

cevap

17

Belki de XmlWriter kabul eden aşırı yüklemeyi kullanabilir ve verilen XmlWriter bir XmlWriterSettings örneği ile yapılandırabilirsiniz? Satır sonları ve girinti uygulamalarını denetlemenizi sağlar.

void Serialize(Object o) 
{ 
    XmlWriterSettings settings = new XmlWriterSettings(); 
    settings.Indent = false; 
    settings.NewLineHandling = NewLineHandling.None; 
    //settings.OtherProperties = values; 

    using (XmlWriter writer = XmlWriter.Create(CreateStream(), settings)) 
    { 
     _serializer.Serialize(writer, o); 
    } 
} 
+0

işe yaradı, teşekkürler –

+1

Parametreleri şu şekilde değiştirmem gerekiyordu: '_serializer.Serialize (yazar, o);'. Harika çözüm, teşekkürler! –

2

Bu, varsayılan olarak biçimlendirme olmadığını düşündüm. Sadece şu denenmiş ve hiçbir biçimlendirme var: Bir örnek vadede

using (var stream = new MemoryStream()) 
{ 
    System.Text.Encoding encoding; 
    using (var writer = XmlWriter.Create(stream)) 
    { 
     if (writer == null) 
     { 
      throw new InvalidOperationException("writer is null"); 
     } 

     encoding = writer.Settings.Encoding; 
     var ser = new XmlSerializer(obj.GetType()); 
     ser.Serialize(writer, obj); 
    } 

    stream.Position = 0; 
    using (var reader = new StreamReader(stream, encoding, true)) 
    { 
     return reader.ReadToEnd(); 
    } 
} 

, aşağıdaki XML döndürdü:

<?xml version="1.0" encoding="utf-8"?><obj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><childOne /><childTwo /><text>text1</text><text>text2</text></obj> 
+2

Belki daha çok hoşunuza gidiyor =) –

+0

Böyle bir tutarsızlık Microsoft'a bildirilmelidir. Bir yöntem farklı şekillerde davranamaz. CultureInfo'ya bağımlı mı? Veya bir .NET Sürümü/Hizmet Paketi mi? Henüz bilmiyorum. –

+0

Şansınız varsa, gönderdiğim kodu çalıştırın. .NET 3.5 SP1 çalıştırıyorum. Gerçek farkın ne olduğunu görelim. –

0

tefrika sınıflar XmlElement gibi (XML tipi üyelerini içeriyorsa da kontrol edin). Ben XSD'den sınıflar oluşturmak için Xsd2Code aracını kullandım ve (çok özel durumda), XmlElement türünde bir üye yarattı. Serileştirme sırasında bu üyenin kendi formatı vardı (tam olarak identasyon). XmlSerializer girintisini açıp kapatmış olsam bile, XmlElement üyesi üzerinde hiçbir etkisi olmadı.

İlgili konular