XML文档(1,2)中存在错误,System.InvalidOperationException:未被预期

从API发送的XML

 0  StringAccessToken StringAccessToken PolarisSampleUser 7 2013-05-27T16:57:46.323  

响应类

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; namespace PAPIAutomatedTestingTool { [XmlRoot(ElementName="AuthorizationResult")] public class AuthorizationResult { public int PAPIErrorCode { get; set; } public string ErrorMessage { get; set; } public string AccessToken { get; set; } public string AccessSecret { get; set; } public int PolarisUserID { get; set; } public int BranchID { get; set; } public DateTime AuthExpDate { get; set; } } } 

代码制作请求和反序列化

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Net; using System.Web; using System.Web.Script.Serialization; using System.Security.Cryptography; using System.Xml; using System.Xml.Serialization; namespace PAPIAutomatedTestingTool { public class APICallMethods { public string URI { get; set; } public string accSecret { get; set; } public string accToken { get; set; } public string authorizationString { get; set; } public bool AuthenticateStaffUser() { try { //Initializing all variables string authReqMethod = "POST"; string authAccessKey = "Sample Access Key"; string authAccessKeyID = "Sample Access ID"; string authPatronPassword = ""; DateTime authDateTime = DateTime.Now; string httpAuthDateTime = authDateTime.ToUniversalTime().ToString("r"); string authURI = "Sample URI"; //Composing the papiHash from the given parameters string papiHash = GetPAPIHash(authAccessKey, authReqMethod, authURI, httpAuthDateTime, authPatronPassword); //Formating the authorization string string authorizationString = String.Format("Authorization: PWS {0}:{1}", authAccessKeyID, papiHash); //Creating and defining the WebRequest WebRequest req = WebRequest.Create(authURI); req.Method = "POST"; req.Headers.Add("PolarisDate", httpAuthDateTime); req.Headers.Add(authorizationString); req.ContentType = "application/xml"; string requestBody = "SampleDomainSampleUsernameSamplePassword"; byte[] reqBodyBytes = System.Text.Encoding.UTF8.GetBytes(requestBody); req.ContentLength = reqBodyBytes.Length; using (Stream requestStream = req.GetRequestStream()) { requestStream.Write(reqBodyBytes, 0, reqBodyBytes.Length); } //Receiving the WebResponse using (WebResponse resp = req.GetResponse()) { AuthorizationResult firstResponse = new AuthorizationResult(); Stream respStream = resp.GetResponseStream(); StreamReader sr = new StreamReader(respStream); XmlSerializer xmlSerializer = new XmlSerializer(typeof(AuthorizationResult)); firstResponse = (AuthorizationResult)xmlSerializer.Deserialize(respStream); Console.WriteLine("Authorization: PWS" + firstResponse.AccessSecret + ":" + firstResponse.AccessToken); return true; } } catch (Exception ex) { Console.WriteLine(ex); return false; } } public string GetPAPIHash(string strAccessKey, string strHTTPMethod, string strURI, string strHTTPDate, string strPatronPassword) { byte[] secretBytes = UTF8Encoding.UTF8.GetBytes(strAccessKey); HMACSHA1 hmac = new HMACSHA1(secretBytes); byte[] dataBytes = null; if (strPatronPassword.Length > 0) { dataBytes = UTF8Encoding.UTF8.GetBytes(strHTTPMethod + strURI + strHTTPDate + strPatronPassword); } else { dataBytes = UTF8Encoding.UTF8.GetBytes(strHTTPMethod + strURI + strHTTPDate); } byte[] computedHash = hmac.ComputeHash(dataBytes); string computedHashString = Convert.ToBase64String(computedHash); return computedHashString; } } } 

我正在使用包含AuthorizationData的主体向API发出POST请求。 API应该返回xml以反序列化为firstresponse。 我收到了xml(通过打印到控制台确认),但我收到There is an error in the XML Document(1,2)并且不希望 。 我在这里先向您的帮助表示感谢。

它似乎在抱怨一个意想不到的根元素,并且在你的问题的其他地方存在一些混乱。

在问题标题中,您有

在示例XML响应中,您有

在C#中你有[XmlRoot(ElementName="AuthorizationResult")]

在您的问题的最后,您提到

这是主题的一些微妙变化。

假设XML样本响应是正确的,您应该更改C#以期望根元素为

 [XmlRoot(ElementName="AuthenticationResult")] public class AuthenticationResult { ...