2009-06-01 10 views
1

dotnet 2.0を使用しています。説明するコード:XmlSerializerとXmlAnyElementの制御ネームスペース

Class1のがように定義され
 Class1 c1 = new Class1(); 
     c1.SomeInt = 5; 

     XmlDocument doc = new XmlDocument(); 
     doc.LoadXml("<anode xmlns=\"xyz\" ><id>123</id></anode>"); 

     c1.Any = new XmlElement[1]; 
     c1.Any[0] = (XmlElement)doc.DocumentElement; 

     XmlSerializer ser = new XmlSerializer(typeof(Class1)); 
     XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
     ns.Add("", "xyz"); 

     StringBuilder sb = new StringBuilder(); 
     XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.OmitXmlDeclaration = true; 

     XmlWriter writer = XmlWriter.Create(sb, settings); 
     writer.WriteStartElement("root"); 
     ser.Serialize(writer, c1, ns); 
     writer.WriteEndElement(); 

     writer.Close(); 

     string str = sb.ToString(); 
     MessageBox.Show(str); 

:このコードは、文字列を表示

[System.Serializable()] 
[System.Xml.Serialization.XmlRoot(Namespace="xyz")] 
public class Class1 
{ 
    private int someInt; 

    public int SomeInt 
    { 
     get { return someInt; } 
     set { someInt = value; } 
    } 

    private System.Xml.XmlElement[] anyField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAnyElementAttribute()] 
    public System.Xml.XmlElement[] Any 
    { 
     get 
     { 
      return this.anyField; 
     } 
     set 
     { 
      this.anyField = value; 
     } 
    } 
} 

<root><Class1 xmlns="xyz"><SomeInt>5</SomeInt><anode xmlns="xyz"><id>123</id></anode></Class1></root> 

これは正しいXMLですが、この場合、私は思ったんだけど簡略化することができる。

"陽極"要素に冗長なxmlns = "xyz"部分を持たないことです。 は、私は希望、すなわち:

<root><Class1 xmlns="xyz"><SomeInt>5</SomeInt><anode><id>123</id></anode></Class1></root> 

これは可能ですか?

答えて

0
settings.NamespaceHandling = NamespaceHandling.OmitDuplicates