Как установить xmlns при сериализации объекта в c # - PullRequest
9 голосов
/ 02 апреля 2010

Я сериализую объект в моей программе ASP.net MVC в строку 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 и тип кодировки при сериализации?

Спасибо

Ответы [ 3 ]

8 голосов
/ 30 апреля 2010

Я обнаружил, что работает, чтобы добавить эту строку в мой класс,

[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);

, пока оба пространства имен совпадают, это работает хорошо.

6 голосов
/ 02 апреля 2010

Тип 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 вы можете определить множество опций, включая кодировку.

1 голос
/ 02 апреля 2010

Посмотрите на атрибуты , которые управляют сериализацией XML в .NET.

В частности, XmlTypeAttribute может быть полезен для вас. Если вы хотите изменить пространство имен по умолчанию для вашего XML-файла, есть второй параметр в конструкторе XmlSerializer, где вы можете определить это.

...