更改XML标签前缀SOAP

时间:2018-11-14 11:36:20

标签: c# xml wcf xml-namespaces messagecontract

我正在尝试创建带有前缀的SOAP消息。但是,我无法正确设置名称空间。我已经尝试了好几天,并尝试了许多在网上找到的建议,但似乎都没有用。我希望你们中的一些可以帮助我。 我得到的是

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <Transaction xmlns="http://tempuri.org/">
      <bankingTransaction>
        <operation parameterOrder="string">
          <fault />
          <fault />
        </operation>
        <transactionDate>dateTime</transactionDate>
        <amount>int</amount>
      </bankingTransaction>
    </Transaction>
  </soap:Body>
</soap:Envelope>

&我真正需要的是

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <res:Transaction xmlns="res:http://tempuri.org/">
      <res:bankingTransaction>
        <res:operation parameterOrder="string">
          <res:fault />
          <res:fault />
        </res:operation>
        <res:transactionDate>dateTime</res:transactionDate>
        <res:amount>int</res:amount>
      </res:bankingTransaction>
    </res:Transaction>
  </soap:Body>
</soap:Envelope>

&我的按摩联系人

[MessageContract]
public class BankingTransaction
{
   [MessageHeader] public Operation operation;
   [MessageHeader] public DateTime transactionDate;
   [MessageBodyMember] private unit sourceAccount;
   [MessageBodyMember] public int amount;
}

请帮助我在XML元素中添加前缀。 谢谢

2 个答案:

答案 0 :(得分:0)

您可能需要执行以下操作:

concat-sequence-format(&tokenize,"\&ampt;")

我不确定您如何序列化对象,但是类似这样的东西会添加前缀:

[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://tempuri.org/")]
[MessageContract]
public class BankingTransaction
{
   [MessageHeader] public Operation operation;
   [MessageHeader] public DateTime transactionDate;
   [MessageBodyMember] private unit sourceAccount;
   [MessageBodyMember] public int amount;
}

可以将 XmlSerializerNamespaces x = new XmlSerializerNamespaces(); x.Add("res", "http://tempuri.org/"); 添加到您的序列化过程中吗?如果不看自己在做什么,很难说。您在该命名空间中的所有合同/类可能都需要以下属性:XmlSerializerNamespaces

答案 1 :(得分:0)