如何反序列化C#中的XML名称空间(System.Xml.Serialization)?
问题描述:
我只是对我的Zthes format反序列化器(System.Xml.Serialization)进行了修饰,它在元素“thes”中使用了命名空间“dc”。所有“term”元素都反序列化,因为它们没有名称空间,但我无法弄清楚如何告诉解串器“thes”元素有一个名称空间。如何反序列化C#中的XML名称空间(System.Xml.Serialization)?
下面是我正在尝试做的(不工作),所以希望有人能给我适当的语法。
[XmlElement("namespace:someElement")]
public string SomeElement;
答
下面是你一个快速的样本...
[XmlRoot("myObject")]
public class MyObject
{
[XmlElement("myProp", Namespace = "http://www.whited.us")]
public string MyProp { get; set; }
[XmlAttribute("myOther", Namespace = "http://www.whited.us")]
public string MyOther { get; set; }
}
class Program
{
static void Main(string[] args)
{
var xnames = new XmlSerializerNamespaces();
xnames.Add("w", "http://www.whited.us");
var xser = new XmlSerializer(typeof(MyObject));
using (var ms = new MemoryStream())
{
var myObj = new MyObject()
{
MyProp = "Hello",
MyOther = "World"
};
xser.Serialize(ms, myObj, xnames);
var res = Encoding.ASCII.GetString(ms.ToArray());
/*
<?xml version="1.0"?>
<myObject xmlns:w="http://www.whited.us" w:myOther="World">
<w:myProp>Hello</w:myProp>
</myObject>
*/
}
}
}
答
[XmlElement("someElement", Namespace="namespace")]
public string SomeElement;
附录:确保“命名空间”是命名空间的完整的URI,而不只是前缀。
这段代码确实帮助。谢谢马修。 – Junto 2010-05-17 12:13:25
很高兴我能帮到你! – 2010-05-17 13:18:51
OP的问题是关于反序列化,而不是序列化。反序列化方法不接受XmlSerializerNamespaces参数。 – 2016-04-30 10:01:39