Я использую этот метод для сериализации моего объекта:
public static string XmlSerialize(object o)
{
var stringWriter = new StringWriter();
var xmlSerializer = new XmlSerializer(o.GetType());
xmlSerializer.Serialize(stringWriter, o);
string xml = stringWriter.ToString();
stringWriter.Close();
return xml;
}
Это делает XML, который начинается следующим образом:
<?xml version="1.0" encoding="utf-16"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
Но я хочу, чтобы это выглядело так:
<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Итак, как мне изменить кодировку на Windows-1252 и установить standalone = yes? Кроме того, как мне получить объект, чтобы исключить значение xmlns?
Я видел пару подобных вопросов, например этот, но я надеялся, что это может быть проще для меня, может быть, где-то установить некоторые атрибуты?
Обновление 2: посмотрев на ответ Джона и комментарии, и подумав об этом больше, я решил просто сделать второй метод. Я не думаю, что создание этого дурацкого пользовательского xml только для третьей стороны в одно время должно быть названо чем-то общим как "XmlSerialize" в первую очередь.
Итак, я создал второй метод, который принимает XML-документ и, во-первых, удаляет один элемент пространства имен следующим образом:
xElement.Attributes().Where(a => a.IsNamespaceDeclaration && a.Value == "http://www.w3.org/2001/XMLSchema").Remove();
тогда он записывает его в XML с кодом Джона. Наконец, он возвращает этот xml, следуя следующему выводу:
new XDeclaration("1.0", "Windows-1252", "yes").ToString()
И это некрасиво, но это дает мне именно то, что мне нужно для этой третьей стороны, чтобы понять мой XML.