簡體   English   中英

在序列化對象時,在.Net中設置StandAlone = Yes

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM