我有一些Xml有效负载,如下所示:
<nm:MyRootElement xmlns:nm="http://test.com/NS1/Global">
<MyRequest>
<ID>123456789</ID>
<Lots>D</Lots>
<Of>abc</Of>
<Other>123</Other>
<Nodes>Z00000002</Nodes>
<etc>wyz</etc>
<InfoWrapper>
<ne:Address xmlns:ne="http://test.com/NS2/Local">
<Name1>Akira Fubuki</Name1>
<Street>1 Hwy To Heaven</Street>
</ne:Address>
<ne:CustomerFields xmlns:ne="http://test.com/NS2/Local">
<RequestorName>Fred Flinstone</RequestorName>
<RequestorTelephoneNumber>123456789</RequestorTelephoneNumber>
</ne:CustomerFields>
</InfoWrapper>
</MyRequest>
<Log>
<SeverityCode>1</SeverityCode>
</Log>
</nm:MyRootElement>
请注意如何在Address和CustomerFields处定义内部名称空间; 我可以将有效负载反序列化为一个类对象,好,比如payloadObj; 但是,当我将对象序列化回xml时,它总是将名称空间放在顶部,如下所示:
<nm:MyRootElement xmlns:nm="http://test.com/NS1/Global" xmlns:ne="http://test.com/NS2/Local">
<MyRequest>
<ID>123456789</ID>
<Lots>D</Lots>
<Of>abc</Of>
<Other>123</Other>
<Nodes>Z00000002</Nodes>
<etc>wyz</etc>
<InfoWrapper>
<ne:Address>
<Name1>Akira Fubuki</Name1>
<Street>1 Hwy To Heaven</Street>
</ne:Address>
<ne:CustomerFields>
<RequestorName>Fred Flinstone</RequestorName>
<RequestorTelephoneNumber>123456789</RequestorTelephoneNumber>
</ne:CustomerFields>
</InfoWrapper>
</MyRequest>
<Log>
<SeverityCode>1</SeverityCode>
</Log>
</nm:MyRootElement>
我知道有效载荷是等效的,但是XmlSerializer是否有一个选项可以强制名称空间出现在特定元素上,而不是始终出现在根元素上?
我的序列号是:
XmlSerializer ser = new XmlSerializer(typeof(MyRootElement));
XmlSerializerNamespaces xsn = new XmlSerializerNamespaces(
new XmlQualifiedName[] {
new XmlQualifiedName ("nm", "http://test.com/NS1/Global"
new XmlQualifiedName ("ne", "http://test.com/NS2/Local")
}
);
using (XmlWriter xw = XmlWriter.Create(outFile))
{
ser.Serialize(xw, payloadObj, xsn);
}