Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.Net 4.0到.Net类中使用HttpClient解析XML响应?_C#_.net_Xml_Httpclient - Fatal编程技术网

C# 如何在.Net 4.0到.Net类中使用HttpClient解析XML响应?

C# 如何在.Net 4.0到.Net类中使用HttpClient解析XML响应?,c#,.net,xml,httpclient,C#,.net,Xml,Httpclient,我有一个响应返回xml的web服务 以下是xml响应的屏幕截图: <?xml version="1.0" encoding="utf-8"?> <Root> <Header> <Message type="String"></Message> </Header> <Output> <Rows> <Row>

我有一个响应返回xml的web服务

以下是xml响应的屏幕截图:

<?xml version="1.0" encoding="utf-8"?>
<Root>
    <Header>
        <Message type="String"></Message>
    </Header>
    <Output>
        <Rows>
            <Row>
                <Result type="Integer">1021806</Result>
            </Row>
        </Rows>
    </Output>
</Root>
    public class ResponseModel
    {
        public class Root
        {
            public Header header { get; set; }
            public Output output { get; set; }
        }
        public class Header
        {
            public string Message { get; set; }
        }
        public class Output
        {
            public List<Row> Rows { get; set; }
        } 
        public class Row
        {
            public int Result { get; set; }
        }
    }
responseContent
有三种方法:

ReadAsStringAsync()
ReadAsStreamAsync()
ReadAsByteArrayAsync()
这三种方法的区别是什么


对于xml响应,我应该使用哪种方法?如何将xml解析为所需的
响应模型?

如何使用“DataContractSerializer”和ReadObject方法?它看起来或多或少是这样的:

var serializer = new DataContractSerializer(typeof(ResponseModel.Root));
var stream = await responseContent.ReadAsStreamAsync();
var response = serializer.ReadObject(stream) as ResponseModel;

您是否在服务和客户机之间共享模型代码?为什么要以这种方式访问web服务?为什么不在VS中将其用作服务引用?你的意思是什么?你能详细说明一下吗。我需要在ReadObject方法中传递根元素吗?是的,序列化程序需要一个ResponseModel。根类型,我将修改我的答案。你可能需要更改模型,在标题和输出中加上大写字母,或者在名称与服务响应不同的字段上使用“DataContractAttribute:[DataMember(Name=“Output”)]自从我使用.net 4.0以来,我做了一件事,因此我删除了wait并调用了.Result in ReadAsStreamAsync();因此它变成了var stream=responseContent.ReadAsStreamAsync().Result;这会影响您的答案吗?
var serializer = new DataContractSerializer(typeof(ResponseModel.Root));
var stream = await responseContent.ReadAsStreamAsync();
var response = serializer.ReadObject(stream) as ResponseModel;