2011-08-09 6 views
7

Aşağıdaki kodda "standalone = yes" i xml olarak ayarlamak istiyorum, bunu nasıl yapabilirim?Ayar StandAlone = Evet in .Net Bir nesneyi serileştirirken

Dim settings As New Xml.XmlWriterSettings 
settings.Encoding = encoding 

Using stream As New IO.MemoryStream, xtWriter As Xml.XmlWriter = _ 
    Xml.XmlWriter.Create(stream, settings) 
    serializer.Serialize(xtWriter, obj) 
    Return encoding.GetString(stream.ToArray()) 
End Using 

Örneğin, bu var:

<?xml version="1.0" encoding="utf-8"?> 

Ama bunu istiyorum: Eğer o zaman bu yapmak istiyorsanız

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 

cevap

7

Eğer WriteProcessingInstruction yöntem ve elle kullanmanız gerekir ifade et.

Using stream As New IO.MemoryStream, xtWriter As Xml.XmlWriter = Xml.XmlWriter.Create(stream, settings) 
     xtWriter.WriteProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"" standalone=""yes""") 
     serializer.Serialize(xtWriter, obj) 
     Return encoding.GetString(stream.ToArray()) 
    End Using 
+0

Teşekkür ederim, ama ("", ""). lol –

+2

xmlriter.WriteStartDocument (true) öğesini kullanabilirsiniz; –

+0

@HasaniBlackwell ugh, şimdi sadece bu yorumu farkettim ....... Bu aradığım cevap olurdu! –

10

Bunu yapmanın çok daha şık bir yol buldum: basitçe XmlWriter örneğinde WriteStartDocument(true) çağrı - Bu kod data serializes ve avutmaya çıkan XML çıkarır. Bir bunu UTF-8 zorlamak için biraz çimdik gerekir StringWriter ancak keep this in mind kullanıyorsanız

Öncelikle: Bir .NET dizesine bir XML belgesi serialising zaman

, kodlama gerekir UTF-16'ya ayarlanmalıdır. Dizeler dahili olarak UTF-16 olarak depolanır, bu nedenle bu mantıklı olan tek kodlamadır. Verileri farklı bir kodlamada saklamak istiyorsanız, bunun yerine bir bayt dizisi kullanırsınız.

using (var sw = new Utf8StringWriter()) using (var xw= XmlWriter.Create(sw, new XmlWriterSettings{Indent = true})) { xw.WriteStartDocument(true); // that bool parameter is called "standalone" var namespaces = new XmlSerializerNamespaces(); namespaces.Add(string.Empty, string.Empty); var xmlSerializer = new XmlSerializer(typeof(data)); xmlSerializer.Serialize(xw, data); Console.WriteLine(sw.ToString()); } 

WriteStartDocument(true)

public sealed class Utf8StringWriter : StringWriter 
{ 
    public override Encoding Encoding { get { return Encoding.UTF8; } } 
} 

gerçekten standalone=true belirterek, o dilin bir yol gibi hissediyor. çıkış başlığı şu şekilde görünür: hala ben ümit kadar zarif değil,

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
+2

Belki de 'xw.WriteStartDocument (tek başına: = doğru) 'adlandırılmış yayların iyi bir kullanımı olur mu? – RubberDuck