2009-06-01 4 views
1

dotnet 2.0을 사용합니다. 코드 설명하기 :XmlSerializer 및 XmlAnyElement의 제어 네임 스페이스

 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); 
클래스 1은 다음과 같이 정의된다

:

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

이 올바른 XML이지만, 나는이 궁금 해요 :

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

이 코드는 문자열을 표시합니다 단순화 될 수있다.

"양극"요소에 중복 xmlns = "xyz"부분이 없으면 좋겠다. 내가 좋아하는 것, 즉 :

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

이 가능합니까?

답변

0
settings.NamespaceHandling = NamespaceHandling.OmitDuplicates