c# - 序列化 XmlDocument 并通过 HTTPWebRequest 发送

标签 c# .net httpwebrequest xmldocument

我正在尝试找出如何正确序列化我的 XmlDocument 并通过 HTTPWebRequest 对象发送它。

这是我目前所拥有的:

Stream requestStream;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://wwwcie.ups.com/ups.app/xml/Track");
request.Method = "POST";

request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postData.Length;
requestStream = request.GetRequestStream();

XmlSerializerNamespaces xsm = new XmlSerializerNamespaces();
xsm.Add("", ""); // remove namespace
XmlSerializer ser = new XmlSerializer(xmlRequest.GetType());
ser.Serialize(requestStream, xmlRequest);

requestStream.Write(postData, 0, postData.Length);
requestStream.Close();

有些事情我不确定。我有 2 个 XmlDocuments 我需要在同一个 HTTPWebRequest 中发送。我之前尝试过将 XmlDocuments 转换为字符串并连接它们(以发送字符串)但是当我使用 StringBuilder/Writer 时它添加了:

  <?xml version="1.0" encoding="utf-8" ?> 
  <string xmlns="http://myNameSpace/">

我的 XmlDocument 对象中已经有声明,所以现在它在那里两次,我不能有 <string...参与其中。将 XmlDocuments 转换为字符串然后连接它们并发送它是否更容易,或者是否有一种简单的方法按原样发送 XmlDocuments?

编辑:

参见 C# XmlDocument Nodes 当我尝试将我的 XmlDocuments 之一转换为字符串时,它显示为

  <?xml version="1.0" encoding="utf-8" ?> 
  <string xmlns="http://myNamespace/">
      <TrackRequest>
         <Request>
            <TransactionReference>
                <CustomerContext>whatever</CustomerContext>
            </TransactionReference>
         </Request>
         <TrackingNumber>123</TrackingNumber>
      </TrackRequest>
   </string> 

我希望我的根是 <TrackRequest>

最佳答案

我猜这个问题与前一个问题有关,如果不首先将它们都包装在根节点中(C# XmlDocument Nodes),则无法将 2 个 xml 文档合并到一个文档中。

如果是这种情况,那么您不想序列化 XmlDocuments 并将它们发送到 WebService。序列化对象是为了传输/存储实际对象,而不是数据。您只想向网络服务发送数据而不是对象,因此只需连接两个 xml 文档并发送即可。

use XmlDocument.OuterXml to get the XmlDocument as a string. ie:

XmlDocument doc1 = new XmlDocument();
doc.LoadXml("Some XML");
XmlDocument doc2 = new XmlDocument();
doc2.LoadXml("Some other XML");
StringBuilder sb = new StringBuilder();
sb.Append(doc1.OuterXml);
sb.Append(doc2.OuterXml);

只需将 sb.ToString() 发送到 WebService。

希望我没有完全误入歧途。

关于c# - 序列化 XmlDocument 并通过 HTTPWebRequest 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1105146/

相关文章:

c# - 使用自动窗口大小设置按钮边距

c# - 为什么 AsObservable 和 AsEnumerable 的实现方式不同?

c# - 在不使用 fiddler 的情况下将 HttpWebRequest 视为 GetResponse 之前的字符串

c# - 仅在 Windows 服务 : System. Runtime.InteropServices.COMException (0x800A03EC) 中:来自 HRESULT 的异常:0x800A03EC

c# - SSL HttpWebRequest 导致内部服务器错误?

c# - 如何检查字符串是否包含带通配符的子字符串?像 abc*xyz

c# - 在类中展平数组的动态方法?

c# - 如何识别我的代码何时在 C# 中进行测试?

C# 未从 HttpWebResponse 获得正确的响应。编码?

c# - 联机异常:Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host