【问题标题】:How do I specify XML serialization attributes to support namespace prefixes during deserialization in .NET?如何在 .NET 中的反序列化期间指定 XML 序列化属性以支持命名空间前缀?
【发布时间】:2010-11-18 06:43:02
【问题描述】:

我有以下 XML:

<person xmlns:a="http://example.com" xmlns:b="http://sample.net">
    <a:fName>John</a:fName>
    <a:lName>Wayne</a:lName>
    <b:age>37</b:age>
</person>

如何在类上定义 XML 序列化属性以支持所描述的场景?

【问题讨论】:

    标签: .net xml xml-serialization xml-namespaces


    【解决方案1】:

    您需要使用XmlElement 属性的命名空间来指示每个字段需要哪些命名空间。这将允许您将字段与特定命名空间相关联,但您还需要在类上公开一个返回类型 XmlNamespaceDeclarations 的属性,以获取前缀关联。

    请参阅下面的文档和示例:

    [XmlRoot(ElementName = "person")]
    public class Person
    {
        [XmlElement(Namespace = "http://example.com")]
        public string fname;
    
        [XmlElement(Namespace = "http://sample.com")]
        public string lname;
    
        [XmlNamespaceDeclarations]
        public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();
    
        public Person()
        {
            xmlns.Add("a", "http://example.com");
            xmlns.Add("b", "http://sample.com");
        }
    }
    

    【讨论】:

    • 请注意,如果您只进行反序列化,似乎不需要 XmlSerializerNamespaces 东西,尽管我仍然认为这是一个好习惯。
    • 传说我一直在寻找这个!
    • 只对元素有效,对属性无效
    • 属性有命名空间??
    • @ZachBonham XmlElement 的链接不正确;它应该是 XmlElementAttribute 的链接:msdn.microsoft.com/en-us/library/…
    猜你喜欢
    • 2011-01-21
    • 2013-05-02
    • 2019-01-26
    • 2012-09-17
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多