c# - 将响应流转换为 XML
问题描述
我向演示 API 发送了 XML 帖子,响应以 XML 流的形式返回,如下所示:
API=3CProductData&XML=%3CProductData+Name%3D%22NameTest%22%3E%0D%0A++%3CId%3EXXXXXXXXX%3C%2FId%3E%0D%0A%3C%2FProductData%3E
我猜这就是流的样子,我的目标是获取该响应并将其存储在一个新的 ProductData 对象中,这是我到目前为止所做的:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
// as an xml: deserialise into your own object or parse as you wish
StreamReader respStream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);
string receivedResponse = respStream.ReadToEnd();
XmlSerializer x = new XmlSerializer(typeof(ProductData));
ProductData product = (ProductData) x.Deserialize(new StringReader(receivedResponse));
Console.WriteLine("Node1: " + product.Id.ToString());
Console.WriteLine("Node2: " + product.Name);
Console.ReadKey();
}
错误返回 System.InvalidOperationException:“XML 文档 (0, 0) 中存在错误。” XmlException:缺少根元素。
解决方案
您必须删除API=3CProductData&XML=
字符串中的部分,然后解码您的部分 XML
看看这段代码工作:
string strRegex = @"<ProductData Name=""NameTest"">\r\n <Id>XXXXXXXXX</Id>\r\n</ProductData>";
ProductData result = null;
using (TextReader reader = new StringReader(strRegex))
{
var serializer = new XmlSerializer(typeof(ProductData));
result = (ProductData)serializer.Deserialize(reader);
}
推荐阅读
- hyperledger-fabric - Hyperledger Composer v0.19.8 升级业务网络时出错
- excel - VBA查找一个字符串并返回所有结果的行号
- asp.net - UpdatePanel 刷新整个页面(ASP.NET WebForm,迁移项目)
- unity3d - 如何禁用 Unity Button 上的 Raycast 矢量?
- c# - 以下构造函数参数没有匹配的夹具数据
- javascript - sqlite3 数据库:TypeError:无法读取未定义的属性
- citrus-framework - 无法使用 citrus 2.7.4 及更高版本执行 citrus 测试用例 xmls
- html - 如何防止 Gmail 从地址创建地图链接?
- service-worker - 如果文件由服务工作者管理,则绕过默认缓存策略
- r - 通过循环遍历 R 中的数据框列表来创建数据框