【发布时间】:2014-10-20 07:00:24
【问题描述】:
是否可以指示 .NET 的 XmlSerializer 将 XML 文档序列化为以下格式:
<?xml version="1.0"?>
<!DOCTYPE root SYSTEM "root.dtd">
<root>
...
</root>
即XML 声明没有编码属性、doctype 和文档的其余部分?
目前我有:
var bomlessUtf8Encoding = new UTF8Encoding(false);
var serializer = new XmlSerializer(typeof(T));
var namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
using (var memoryStream = new MemoryStream())
using (var xmlWriter = XmlWriter.Create(memoryStream, new XmlWriterSettings { Indent = false, Encoding = null }))
{
xmlWriter.WriteDocType(typeof(T).Name, null, ContentSerializer.MlpSvcInit320Dtd, null);
serializer.Serialize(xmlWriter, input, namespaces);
return bomlessUtf8Encoding.GetString(memoryStream.ToArray());
}
但由于 Encoding 为空,.NET 在创建 XmlWriterSettings 对象时会发出声音。有没有一种规范的方法,或者最简单的方法是简单地序列化为一个字符串,然后在其上调用.Replace()?
很遗憾,第三方供应商要求序列化字符串完全采用这种格式。
【问题讨论】: