如何在C#(System.XML.Serialization)中反序列化XML名称空间?
我只是对我的反序列化程序(System.Xml.Serialization)做了最后的润色,它在元素“thes”中使用名称空间“dc”。所有“term”元素都可以反序列化,因为它们没有名称空间,但我不知道如何告诉反序列化器“thes”元素有名称空间 下面是我正在尝试做的(不起作用),希望有人能给我正确的语法如何在C#(System.XML.Serialization)中反序列化XML名称空间?,c#,xml,serialization,namespaces,C#,Xml,Serialization,Namespaces,我只是对我的反序列化程序(System.Xml.Serialization)做了最后的润色,它在元素“thes”中使用名称空间“dc”。所有“term”元素都可以反序列化,因为它们没有名称空间,但我不知道如何告诉反序列化器“thes”元素有名称空间 下面是我正在尝试做的(不起作用),希望有人能给我正确的语法 [XmlElement("namespace:someElement")] public string SomeElement; 附录:确保“namespace”是名称空间的完整URI,而
[XmlElement("namespace:someElement")]
public string SomeElement;
附录:确保“namespace”是名称空间的完整URI,而不仅仅是前缀。这里有一个快速示例供您使用
[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>
*/
}
}
}
[XmlRoot(“myObject”)]
公共类MyObject
{
[XmlElement(“myProp”,命名空间=”http://www.whited.us")]
公共字符串MyProp{get;set;}
[XmlAttribute(“myOther”,命名空间=”http://www.whited.us")]
公共字符串MyOther{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var xnames=新的XmlSerializerNamespaces();
添加(“w”http://www.whited.us");
var xser=新的XmlSerializer(typeof(MyObject));
使用(var ms=new MemoryStream())
{
var myObj=新的MyObject()
{
MyProp=“你好”,
MyOther=“世界”
};
序列化(ms、myObj、xnames);
var res=Encoding.ASCII.GetString(ms.ToArray());
/*
你好
*/
}
}
}
OP的问题是关于反序列化,而不是序列化。反序列化方法不接受XmlSerializerNamespaces参数。我想这就是为什么他们在6年前接受了我的答案,
[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>
*/
}
}
}