如何在 .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 序列化属性以支持命名空间前缀?的主要内容,如果未能解决你的问题,请参考以下文章