我正在使用System.Xml.Serialization将类序列化为xdocument。
<tns:RatingRequest xmlns:tns="http://somewebsite/services/rating"
xmlns:tns1="http://somewebsite/services/rating"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://somewebsite/services/rating.xsd ">
<tns:Configuration>
<tns:Client>
<tns:TradingPartnerNum>101010</tns:TradingPartnerNum>
</tns:Client>
</tns:Configuration>
<tns:PickupDate>2017-12-12T00:00:00</tns:PickupDate>
<tns:LatestDeliveryDate>0001-01-01T00:00:00</tns:LatestDeliveryDate>
<tns:Stops>
<tns:Index>1</tns:Index>
</tns:Stops>
</tns:RatingRequest>
我需要的只是具有tns:namespace的第一个节点,如
<tns:RatingRequest xmlns:tns="http://somewebsite/services/rating"
xmlns:tns1="http://somewebsite/services/rating"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://somewebsite/services/rating.xsd ">
<Configuration>
<TradingPartner>
<TradingPartnerNum>101010</TradingPartnerNum>
</TradingPartner>
</Configuration>
<PickupDate>2017-10-27T00:00:00-05:00</PickupDate>
<DeliveryDate>-05:00</DeliveryDate>
<Stops>
<Stop>
<Index>1</Index>
</stop>
</stops>
</tns:RatingRequest>
这样做有干净的方法吗?
答案 0 :(得分:2)
这里的技巧是在你想要的xml中,子元素的命名空间是空命名空间。您的 root 元素位于"http://somewebsite/services/rating"
中,默认情况下,命名空间是继承的;所以:您需要在用于子元素的任何xml序列化程序属性中包含Namespace = ""
。例如,如果您有:
[XmlElement("PickupDate")]
public DateTime SomeDate {get;set;}
那么它可能会成为:
[XmlElement("PickupDate", Namespace = "")]
public DateTime SomeDate {get;set;}
您需要为其他元素重复此操作。