作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们需要调用一个 SOAP 服务。
不幸的是,WSDL 生成的代码没有按预期工作,因为它们需要 MTOM,causes problems we have not been able to resolve .所以我们被迫重新发明轮子,我正在努力找出最好的(或至少是一个好方法)来做到这一点。
SOAP 服务将创建如下响应:
--uuid:d49971de-e2c2-4af4-947d-c0acc0f6ad64
Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml"
Content-Transfer-Encoding: binary
Content-ID:
<root.message@cxf.apache.org>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<ns2:listAttachmentsResponse xmlns:ns2="http://ws.praxedo.com/v6/businessEvent">
<return>
<resultCode>0</resultCode>
<entities>
<entityId>00044</entityId>
<name>JohnDoe.pdf</name>
<addedOnDevice>false</addedOnDevice>
<creationDate>2021-03-17T20:48:36.849+01:00</creationDate>
<external>false</external>
<id>1103057659_1500033662_C_05126a814b440b8c6efea0d195cbae8f</id>
<lastModificationDate>2021-05-04T20:38:42.829+02:00</lastModificationDate>
<size>249794</size>
<unmodifiable>false</unmodifiable>
</entities>
<entities>
<entityId>00044</entityId>
<name>OAY3PD.pdf</name>
<addedOnDevice>false</addedOnDevice>
<creationDate>2021-03-17T20:48:36.829+01:00</creationDate>
<external>false</external>
<id>1103057659_1500033662_C_04870c813b0c352bed5213425a946d5c</id>
<lastModificationDate>2021-05-04T20:38:42.829+02:00</lastModificationDate>
<size>465275</size>
<unmodifiable>false</unmodifiable>
</entities>
</return>
</ns2:listAttachmentsResponse>
</soap:Body>
</soap:Envelope>
--uuid:d49971de-e2c2-4af4-947d-c0acc0f6ad64--
public class ListAttachmentsResponse {
public int ResultCode { get; init; }
public Attachment[] Attachments
}
public class Attachment {
// This is the "entityId", we need to keep the leading zeros.
public string BusinessEventId { get; init; }
public string FileName { get; init; }
public bool IsAddedOnDevice { get; init; }
public DateTime CreationDate { get; init; }
public bool IsExternal { get; init; }
public string Id { get; init; }
public DateTime LastModificationDate { get; init; }
public int size { get; init; }
public bool IsUnmodifiable { get; init ;}
}
...但如果其他东西更容易检索,我可以灵活处理结构。
最佳答案
在使用 Visual Studio 的“选择性粘贴 -> 将 Xml 粘贴为类”和一些示例数据后,我能够使用以下方法:
private const string EnvelopeClose = "</soap:Envelope>";
private static listAttachmentsResponse Parse(string responseContent)
{
string data = responseContent[responseContent.IndexOf("<soap:Envelope")..];
int envelopeCloseIndex = data.IndexOf(EnvelopeClose);
data = data.Substring(0, envelopeCloseIndex) + EnvelopeClose;
XmlSerializer serializer = new(typeof(ResponseEnvelope));
ResponseEnvelope result;
using (StringReader reader = new(data))
{
result = (ResponseEnvelope)serializer.Deserialize(reader);
}
return result.Body.listAttachmentsResponse;
}
我认为这很丑陋,所以我愿意接受更好的方法来做这件事的建议!
关于c# - 在 C# 中,我应该如何反序列化完整的 SOAP XML 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69270797/
我是一名优秀的程序员,十分优秀!