首页 > 解决方案 > 将响应流转换为 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:缺少根元素。

标签: c#xmlreststream

解决方案


您必须删除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);
}

推荐阅读