Пространство имен XmlSerializer не видно, почему? - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть класс, который я хочу сериализовать:

[XmlRoot(ElementName = "FileInfoMessage")]
public class Message : IMessage
{
 [XmlAttribute]
 public int Id { get; set; }

 [XmlAttribute(Namespace = "Files")]
 public Version { get; set; }
 //...
}

и мой метод сериализации:

//_xmlData - string containing xml content
public void SerializeData(IMessage message, Encoding encoding)
        {
            using (var stream = new MemoryStream())
            {
                var writerSettings = new XmlWriterSettings {Encoding = encoding, OmitXmlDeclaration = false, Indent = true, NamespaceHandling = NamespaceHandling.Default };
                var writer = XmlWriter.Create(stream, writerSettings);
                var serializer = new XmlSerializer(message.GetType());
                var namespaces = new  XmlSerializerNamespaces();
                namespaces.Add("", "Files"); //if I add custom prefix, it will be visible
                serializer.Serialize(writer, message, namespaces);
                stream.Position = 0;
                _xmlData = new StreamReader(stream).ReadToEnd();
            }

что я хочу достичь:

<?xml version="1.0" encoding="windows-1250"?>
<FileInfoMessage Id = "1" **xmlns="Files"** Version="2">
 //...
</FileInfoMessage>

но я получаю:

<?xml version="1.0" encoding="windows-1250"?>
<FileInfoMessage Id = "1" p1:Version="2" xmlns:p1="Files">
 //...
</FileInfoMessage>

и если я изменю в моей строке SerilizeMethod: namespaces.Add ("whatIwant", "Files");

Я получил:

 <?xml version="1.0" encoding="windows-1250"?>
    <FileInfoMessage Id = "1" **xmlns:whateverIwant="Files"** Version="2">
     //...
    </FileInfoMessage>

любой возможный способ сделать это?

* Сообщение отредактировано после нескольких изменений.

1 Ответ

0 голосов
/ 17 февраля 2012

Попробуйте передать пустую строку для первого параметра в namespaces.Add ("", "Files). Насколько я помню, это помогает.

...