C# 即使根节点与其子节点位于不同的命名空间中,我是否可以避免用重复的XmlElement属性使类混乱?
我正在从一个我无法控制的web服务检索XML文档。XML的格式类似于以下内容: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
<?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>