[英]Setting StandAlone = Yes in .Net when serializing an object
在下面的代碼中我想為xml設置“standalone = yes”,我該怎么做?
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
例如,我有這個:
<?xml version="1.0" encoding="utf-8"?>
但我想要這個:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
我發現了一種更優雅的方法:只需在XmlWriter
實例上調用WriteStartDocument(true)
- 此代碼序列化data
並將生成的XML輸出到控制台。
首先,如果你使用的是StringWriter
你需要稍微調整它以強制使用UTF-8,但要記住這一點 :
將XML文檔序列化為.NET字符串時,編碼必須設置為UTF-16。 字符串在內部存儲為UTF-16,因此這是唯一有意義的編碼。 如果要以不同的編碼存儲數據,則使用字節數組。
public sealed class Utf8StringWriter : StringWriter
{
public override Encoding Encoding { get { return Encoding.UTF8; } }
}
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)
真的感覺像是指定standalone=true
的慣用方法。 輸出標題如下所示:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
如果你想這樣做,那么你需要使用WriteProcessingInstruction
方法並手動寫出來。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.