如何在 .NET 中的反序列化期间指定 XML 序列化属性以支持命名空间前缀?

Posted

技术标签:

【中文标题】如何在 .NET 中的反序列化期间指定 XML 序列化属性以支持命名空间前缀?【英文标题】:How do I specify XML serialization attributes to support namespace prefixes during deserialization in .NET? 【发布时间】: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 序列化属性以支持所描述的场景?

【问题讨论】:

【参考方案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/…

以上是关于如何在 .NET 中的反序列化期间指定 XML 序列化属性以支持命名空间前缀?的主要内容,如果未能解决你的问题,请参考以下文章

.net 3.5 中的反序列化对象

XML 文档中的反序列化错误(1,1)

在 xml 序列化期间忽略属性,但在反序列化期间不忽略

在反序列化期间使用 XML 装饰指定默认值

杰克逊在失踪财产的反序列化期间抛出NPE

在 .NET JSON 序列化期间忽略字段;类似于 [XmlIgnore]?