Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#(System.XML.Serialization)中反序列化XML名称空间?_C#_Xml_Serialization_Namespaces - Fatal编程技术网

如何在C#(System.XML.Serialization)中反序列化XML名称空间?

如何在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,而

我只是对我的反序列化程序(System.Xml.Serialization)做了最后的润色,它在元素“thes”中使用名称空间“dc”。所有“term”元素都可以反序列化,因为它们没有名称空间,但我不知道如何告诉反序列化器“thes”元素有名称空间

下面是我正在尝试做的(不起作用),希望有人能给我正确的语法

[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>
             */
        }
    }
}