Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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# 即使根节点与其子节点位于不同的命名空间中,我是否可以避免用重复的XmlElement属性使类混乱?_C#_Xml_Serialization - Fatal编程技术网

C# 即使根节点与其子节点位于不同的命名空间中,我是否可以避免用重复的XmlElement属性使类混乱?

C# 即使根节点与其子节点位于不同的命名空间中,我是否可以避免用重复的XmlElement属性使类混乱?,c#,xml,serialization,C#,Xml,Serialization,我正在从一个我无法控制的web服务检索XML文档。XML的格式类似于以下内容: <?xml version="1.0"?> <ns:obj xmlns:ns="somenamespace"> <address>1313 Mockingbird Lane</address> <residents>5</residents> </ns:obj> [XmlRoot(Namespace="somen

我正在从一个我无法控制的web服务检索XML文档。XML的格式类似于以下内容:

<?xml version="1.0"?>
<ns:obj xmlns:ns="somenamespace">
     <address>1313 Mockingbird Lane</address>
     <residents>5</residents>
</ns:obj>
[XmlRoot(Namespace="somenamespace", ElementName="obj")]
public class xmlObject
{
    [XmlElement(Namespace = "")]
    public string address { get; set; }

    [XmlElement(Namespace = "")]
    public int residents { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        string xml =
            "<?xml version=\"1.0\"?>" +
            "<ns:obj xmlns:ns=\"somenamespace\">" +
            "   <address>1313 Mockingbird Lane</address>" +
            "   <residents>5</residents>" +
            "</ns:obj>";

        var serializer = new XmlSerializer(typeof(xmlObject));

        using (var reader = new StringReader(xml))
        {
             var result = serializer.Deserialize(reader) as xmlObject;

             Console.WriteLine("{0} people live at {1}", result.residents, result.address);
             // Output: "5 people live at 1313 Mockingbird lane"
        }
    }
}
result.address
等于
null

我理解反序列化过程如此工作的基本原理,但我想知道是否有一种不太详细的方式告诉
XmlSerializer
对象的子元素与根节点不在同一名称空间中

我在生产中使用的对象有几十个成员,为了清洁起见,如果可以很容易避免的话,我希望避免使用
[xmlement(Namespace=”“)]
标记所有这些对象。

您可以结合使用,使根元素和根元素的元素具有不同的名称空间:

[XmlRoot(Namespace="somenamespace", ElementName="obj")]
[XmlType(Namespace="")]
public class xmlObject
{
    public string address { get; set; }

    public int residents { get; set; }
}
使用上述类型,如果我反序列化并重新序列化您的XML,我会得到:



.

如果您知道与web服务的契约,为什么不使用a将XML反序列化到对象中呢

[XmlRoot(Namespace="somenamespace", ElementName="obj")]
[XmlType(Namespace="")]
public class xmlObject
{
    public string address { get; set; }

    public int residents { get; set; }
}
<q1:obj xmlns:q1="somenamespace">
  <address>1313 Mockingbird Lane</address>
  <residents>5</residents>
</q1:obj>