Я использую этот метод для сериализации моего объекта:
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.