代码之家  ›  专栏  ›  技术社区  ›  Moe Sisko

XmlSerializer和控制XmlAnyElement中的命名空间

  •  1
  • Moe Sisko  · 技术社区  · 16 年前

    使用Dotnet2.0。要说明的代码:

            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类的定义如下:

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

    这有可能吗?

    2 回复  |  直到 9 年前
        1
  •  1
  •   Mitch Wheat    16 年前

    不,我不相信你能。可以使用别名命名空间,如本文中所述: Prettification of XML Serialization within Web Services .

        2
  •  0
  •   Nick Whaley    14 年前
    settings.NamespaceHandling = NamespaceHandling.OmitDuplicates