我正在尝试构建一个XML文档,我将用它通过HTTPS发送到API,但是我注意到即使我在我的XML中添加了一个XDeclaration元素,XDeclaration也没有出现在字符串中我使用xmlDoc.ToString()
方法返回。
是否有人知道我是否遗漏了某个特定设置或出现<?xml version="1.0" encoding="UTF-8" ?>
元素未出现的原因?
xmlDoc = new XDocument(
new XDeclaration("1.0", "UTF-8", "yes"),
new XElement("NABTransactMessage",
new XElement("MessageInfo",
new XElement("MessageID", "5167813675aa47d181a7c76979f2de00"),
new XElement("MessageTimeStamp", "20152701024752898882+000"),
new XElement("timeoutValue", 60),
new XElement("apiVersion", "spxml-4.2")
),
new XElement("MerchantInfo",
new XElement("MerchantID", "XYZ0010"),
new XElement("password", "abcd1234")
),
new XElement("RequestType", "Periodic"),
new XElement("Periodic",
new XElement("PeriodicList", new XAttribute("count", 1),
new XElement("PeriodicItem", new XAttribute("ID", 1),
new XElement("actionType", "addcrn"),
new XElement("periodicType", 5),
new XElement("crn", "85c2960d-1422326872"),
new XElement("CreditCardInfo",
new XElement("cardNumber", 4111111111111111),
new XElement("expiryDate", "08/20"),
new XElement("cvv", 123)
)
)
)
)
)
);
return xmlDoc.ToString(SaveOptions.None);
通过HTTPS发送请求的代码:
public static string SendRequest(string requestContent, string requestContentType, string requestUrl)
{
try
{
var request = (HttpWebRequest)WebRequest.Create(requestUrl);
byte[] bytes;
bytes = System.Text.Encoding.UTF8.GetBytes(requestContent);
request.ContentType = requestContentType + "; encoding='utf-8'";
request.ContentLength = bytes.Length;
request.Method = "POST";
//request.Timeout = 5000;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
using (var requestStream = request.GetRequestStream())
{
requestStream.Write(requestContent, 0, requestContent.Length);
}
using (var response = (HttpWebResponse)request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
return new StreamReader(responseStream).ReadToEnd();
}
}
}
注意:xmlDoc.ToString()
值作为第一个参数传递给SendRequest()
,requestContentType
设置为"text/xml"
答案 0 :(得分:5)
XDocument.ToString()
不包含声明。相反,请使用XDocument.Save()
,例如:
public static string ToXml(this XDocument xDoc)
{
StringBuilder builder = new StringBuilder();
using (TextWriter writer = new StringWriter(builder))
{
xDoc.Save(writer);
return builder.ToString();
}
}
如果具体您需要使编码字符串说&#34; UTF-8&#34;,请参见此处:Force XDocument to write to String with UTF-8 encoding
请注意,此扩展名适用于XDocument,而不是具有OuterXml的XmlDocument。
答案 1 :(得分:0)
序列化为字符串不能保留Utf-8
声明,因为它在那时无效 - 因此它将被删除。
如果需要Utf-8(默认)编码,则需要将数据保存为流。示例和更多讨论 - Serializing an object as UTF-8 XML in .NET。