2012-02-17 6 views
0

私はシリアライズするクラスがあります。XmlSerializer名前空間が表示されない理由は何ですか?

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

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

と私のSerializeメソッド:

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

が、私は得る:私はachiveたいもの

//_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" p1:Version="2" xmlns:p1="Files"> 
//... 
</FileInfoMessage> 

と私のSerilizeMethod行を変更した場合: namespaces.Add( "whateverIwant"、 "Files");

は、私が得た:

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

あらゆる可能な方法は、それを実現するために?

*変更が少ないと投稿が編集されます。

答えて

0

(ファイル「」「)namespaces.Addに最初のパラメータに空の文字列を渡して試してみてください。私の知る限り、これはトリックを行い覚えることができるよう。

+0

あなたはnamespace.Add(String.Emptyのを、」意味ファイル ");? – TrN

+0

これは同じことですが、" "またはString.Empty。 –

+0

ですが、今はそうしていますが、名前空間は表示されません。 – TrN

関連する問題