0
是否有可能指示.NET的XmlSerializer的XML文檔序列化格式如下:的XmlSerializer忽略編碼屬性
<?xml version="1.0"?>
<!DOCTYPE root SYSTEM "root.dtd">
<root>
...
</root>
即XML聲明沒有編碼屬性,文檔類型,然後將文檔的其餘部分?
目前我有:
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());
}
但創建XmlWriterSettings對象因編碼被空當.NET亂叫。有沒有規範的方法,還是最簡單的序列化爲一個字符串,然後打電話給.Replace()
?
不幸的是,第三方供應商要求序列化字符串完全採用這種格式。
謝謝!它看起來像它的工作(雖然我不得不手動調用'WriteStartDocument()')。有沒有辦法用'XmlWriter'來做到這一點? 「XmlTextWriter」的文檔包含注意事項»從.NET Framework 2.0開始,我們建議您使用System.Xml.XmlWriter類。« – knittl 2014-10-20 08:24:20
嘿,我真的不知道。也許這篇博文會幫助:http://www.cookcomputing.com/blog/archives/000577.html,它涉及覆蓋一些類,看起來對我來說過分殺傷。 – pmatyszok 2014-10-20 08:46:26
我在單元測試中驗證生成的字符串。有時我仍然可以獲得編碼屬性。似乎有某種競爭條件(只有插入,如果我一起執行其他測試)。每次我序列化XML時,我都會創建一個新的'XmlTextWriter'實例。會發生什麼? – knittl 2014-10-20 09:22:31