【发布时间】:2013-10-29 15:50:28
【问题描述】:
我想在一个简短的 C# 应用程序中使用一个公共 web 服务: http://ws.parlament.ch/
此 Web 服务返回的 XML 开头有一个“BOM”,这导致 RESTSharp 无法反序列化 XML,并显示以下错误消息:
检索响应时出错。检查内部细节以获取更多信息。 ---> System.Xml.XmlException: 根级别的数据无效。 1号线, 位置 1. 在 System.Xml.XmlTextReaderImpl.Throw(Exception e)
在 System.Xml.XmlTextReaderImpl.Throw(String res, String arg) 在 System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace() 在 System.Xml.XmlTextReaderImpl.ParseDocumentContent() 在 System.Xml.XmlTextReaderImpl.Read() 在 System.Xml.Linq.XDocument.Load(XmlReader 阅读器,LoadOptions 选项) 在 System.Xml.Linq.XDocument.Parse(字符串文本,LoadOptions 选项)
在 System.Xml.Linq.XDocument.Parse(字符串文本)在 RestSharp.Deserializers.XmlDeserializer.Deserialize[T](IRestResponse 响应)在 RestSharp.RestClient.Deserialize[T](IRestRequest 请求,IRestResponse 原始)
--- 内部异常堆栈跟踪结束 ---
这是一个使用http://ws.parlament.ch/sessions?format=xml 获取“会话”列表的简单示例:
public class Session
{
public int Id { get; set; }
public DateTime? Updated { get; set; }
public int? Code { get; set; }
public DateTime? From { get; set; }
public string Name { get; set; }
public DateTime? To { get; set; }
}
static void Main(string[] args)
{
var request = new RestRequest();
request.RequestFormat = DataFormat.Xml;
request.Resource = "sessions";
request.AddParameter("format", "xml");
var client = new RestClient("http://ws.parlament.ch/");
var response = client.Execute<List<Session>>(request);
if (response.ErrorException != null)
{
const string message = "Error retrieving response. Check inner details for more info.";
var ex = new ApplicationException(message, response.ErrorException);
Console.WriteLine(ex);
}
List<Session> test = response.Data;
Console.Read();
}
当我第一次使用 Fiddler 操作返回的 xml 以删除前 3 位(“BOM”)时,上面的代码有效!有人可以帮我直接在 RESTSharp 中处理这个问题吗?我究竟做错了什么?提前谢谢你!
【问题讨论】:
标签: c# restsharp byte-order-mark