Я сериализирую объект в своей программе MVC ASP.net к строке xml как это;
StringWriter sw = new StringWriter();
XmlSerializer s = new XmlSerializer(typeof(mytype));
s.Serialize(sw, myData);
Теперь это дает мне это как первые 2 строки;
<?xml version="1.0" encoding="utf-16"?>
<GetCustomerName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
мой вопрос, Как я могу изменить xmlns и тип кодировки при сериализации?
Спасибо
Что я нашел, что работает, так это добавить эту строку в мой класс,
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://myurl.com/api/v1.0", IsNullable = true)]
и добавить это в мой код, чтобы добавить пространство имен, когда я вызываю serialize
XmlSerializerNamespaces ns1 = new XmlSerializerNamespaces();
ns1.Add("", "http://myurl.com/api/v1.0");
xs.Serialize(xmlTextWriter, FormData, ns1);
до тех пор, пока оба пространства имен совпадают, это работает хорошо.
Посмотрите на атрибуты, управляющие сериализацией XML в .NET.
В частности, XmlTypeAttribute может оказаться полезным для вас. Если вы хотите изменить пространство имен по умолчанию для вашего XML-файла, существует второй параметр конструктора XmlSerializer
, где вы можете это определить.
Тип XmlSerializer
имеет второй параметр в своем конструкторе, который является пространством имен xml по умолчанию - пространство имен «xmlns:»:
XmlSerializer s = new XmlSerializer(typeof(mytype), "http://yourdefault.com/");
Чтобы установить кодировку, я бы посоветовал вам использовать XmlTextWriter
вместо прямого StringWriter
и создайте его примерно так:
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
XmlTextWriter xtw = XmlWriter.Create(filename, settings);
s.Serialize(xtw, myData);
В XmlWriterSettings
вы можете определить множество параметров, включая кодировку.