我正在使用(不是我的)使用肥皂结构构建的 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>
我正在尝试从中构建一个 C# 对象。确定我可以在每个节点上进行,提取内部文本并填充自定义类型,但我知道可以这样做(我仍然需要构建类型)。我曾尝试在 httpClient 中使用内置的反序列化机制,还下载了 protobuf-net 并在那里尝试了运气但也失败了。
我有以下方法来处理连接:
公共无效 RunPostTask(字符串 url,字符串请求) { 字符串 res = ""; var client = new HttpClient(); HttpRequestMessage 请求 = 新的 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); }
我想反序列化 res 字符串(上面显示了一个典型的结构)
还想知道我使用 HttpClient 的方式是否正确,或者更好的设计是可取的?
谢谢吉拉德