Это решение { ссылка } для. Net Framework больше не работает в Do tnet Core. Протестировано с Dotent Core 3.1.101 и. Net Framework 4.7.1
Есть ли более элегантное решение, чем этот обходной путь? { ссылка }
В XmlEncodedRawTextWriter в строке 242 https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.Xml/src/System/Xml/Core/XmlEncodedRawTextWriter.cs#L242 используется другой экземпляр, чем я установил в XmlWriterSettings. Я думаю, что проблема в строке 175.
Есть ли другой способ для Do tnet Core написать XML объявление UTF-8 в верхнем регистре?
Это требование для Apple Plist файлы.
var doc = new XDocument(
new XDocumentType("plist", "-//Apple//DTD PLIST 1.0//EN", "http://www.apple.com/DTDs/PropertyList-1.0.dtd", null),
new XElement("plist"))
{
Declaration = new XDeclaration("1.0", "UTF-8", string.Empty)
};
var settings = new XmlWriterSettings
{
//Encoding = new UTF8Encoding()
Encoding = new UpperCaseUTF8Encoding()
};
using (var xmlWriter = XmlWriter.Create("demo.xml", settings))
{
Console.WriteLine($"{xmlWriter.Settings.Encoding.WebName}, {settings.Encoding.WebName}");
doc.Save(xmlWriter);
}
public class UpperCaseUTF8Encoding : UTF8Encoding
{
public UpperCaseUTF8Encoding() : this(false)
{
}
public UpperCaseUTF8Encoding(bool encoderShouldEmitUTF8Identifier) : this(encoderShouldEmitUTF8Identifier, false)
{
}
public UpperCaseUTF8Encoding(bool encoderShouldEmitUTF8Identifier, bool throwOnInvalidBytes) : base(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes)
{
}
public override string WebName => base.WebName.ToUpper(CultureInfo.InvariantCulture);
}