Mr *_*ubs 8 .net serialization xml-serialization
在下面的代码中我想为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
Run Code Online (Sandbox Code Playgroud)
例如,我有这个:
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
但我想要这个:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)
Mat*_*don 16
我发现了一种更优雅的方法:只需调用WriteStartDocument(true)您的XmlWriter实例 - 此代码序列化data并将生成的XML输出到控制台.
首先,如果你正在使用a,StringWriter你需要稍微调整它以强制使用UTF-8,但要记住这一点:
将XML文档序列化为.NET字符串时,编码必须设置为UTF-16.字符串在内部存储为UTF-16,因此这是唯一有意义的编码.如果要以不同的编码存储数据,则使用字节数组.
public sealed class Utf8StringWriter : StringWriter
{
public override Encoding Encoding { get { return Encoding.UTF8; } }
}
Run Code Online (Sandbox Code Playgroud)
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());
}
Run Code Online (Sandbox Code Playgroud)
WriteStartDocument(true)真的感觉像是指定的惯用方式standalone=true.输出标题如下所示:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)
如果你想这样做,那么你需要使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7590 次 |
| 最近记录: |