C# 反序列化http响应

C# 反序列化http响应,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我正在使用(不是我的)一个用soap结构构建的api <?xml version='1.0' encoding='UTF-8'?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <somePrefix:someNodeName xmlns="ulrWithNoPrefix" xmlns:somePrefix="urlWithPrefix

我正在使用(不是我的)一个用soap结构构建的api

<?xml version='1.0' encoding='UTF-8'?>
 <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
     <somePrefix:someNodeName xmlns="ulrWithNoPrefix" xmlns:somePrefix="urlWithPrefix"
    xmlns:anotherPrefix="UrlForAnotherprefix xmlns:AttributePrefix="UrlForAttributePrefix>
     <anotherPrefix:childNode1>value</anotherPrefix:childNode1>
     <anotherPrefix:childNode2>value</anotherPrefix:childNode2>
     <anotherPrefix:childNode3>value</anotherPrefix:childNode3>
     <anotherPrefix:childNode3 AttributePrefix:AttributeName="attributeValue/>
  </somePrefix:someNodeName>
</S:Body>
</S:Envelope>
我想反序列化res字符串(上面显示了一个典型的结构)

还想知道我使用HttpClient的方式是否正确,或者更好的设计更好

谢谢
Gilad

你能不能不只是添加对服务的引用(你需要服务的WSDL文档),.NET会为你生成代理类。我有WSDL和xsd,但所有位置和目标名称空间都是错误的。他们给了我一些静态文件,因为“live”该服务的文件格式不好。当我尝试向该服务添加引用或使用wsdl.exe自己创建代理文件时,由于xsd文件格式不正确,我失败了。我无法告诉他们-修复它,我需要找到一个解决方案……我创建了一个静态wsdl和xsd,并使用SoapUI管理创建所有soap请求/响应。我调整了wsdl文件以使用服务的ip地址而不是dns名称,这是能够引用wsdl文件并创建代码所需的全部。我不确定它是否会在这方面有所帮助,但我所做的是:1。如果包含任何xsd,请更改类型-->xsd:schema-->**xsd:include**schemaLocation属性到静态文件位置。2.将服务元素中wsdlsoap:address元素中的location元素更改为使用ip地址而不是dns名称。3.对于其他xsd文件中导入的每个xsd文件,我已将xsd:schema元素中xsd:import元素的schemaLocation属性更改为静态文件位置。在我做了这3个更改之后,我能够使用wsdl.exe工具或成功地为WCF添加引用。感谢CodeCaster和Chris Diver给我的两条明显的提示,让我回到正轨。有时候,你需要一个简单的“为什么不……”来让你重新思考……很高兴你把问题解决了。

public void RunPostTask(string url, string req) { string res = ""; var client = new HttpClient(); HttpRequestMessage request = new HttpRequestMessage(); request.Content = new StringContent(req); request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");

        var task =
            client.PostAsync(url, request.Content).ContinueWith((TaskResponse) =>
        {
            TaskResponse.Result.EnsureSuccessStatusCode();
            var response = TaskResponse.Result;
            var ReadTask = response.Content.ReadAsStringAsync();
            ReadTask.Wait(10000);
            res = ReadTask.Result;

        }).ContinueWith((err) =>
            {
                if (err.Exception != null)
                {
                    res = err.Exception.ToString();
                }
            });
        task.Wait(10000);
    }