XmlSerializer-可以强制在特定元素上呈现名称空间吗?

时间:2019-04-08 08:57:39

标签: .net xml-serialization xmlserializer

我有一些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);
}

0 个答案:

没有答案