我试图复制一个现在正在生产的旧肥皂服务。合同,请求和响应必须是完全相同,以便我们不需要更新使用此服务的所有相关系统。这个老肥皂服务的事情是,其中一个回应是非常奇怪的。它具有以下结构:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://something" xmlns:ns1="http://something1">
<soap:Body>
<ns:MyResponse>
<ns:GetInfo>
<ns1:IdNumber>12345</ns:IdNumber>
<ns1:PersondataList>
<ns1:FirstName>John</ns1:FirstName>
<ns1:LastName>Travolta</ns1:LastName>
</ns1:PersondataList>
</ns:GetInfo>
</ns:MyResponse>
</soap:Body>
</soap:envelope>
这一点让我想到了代码中的以下结构:
public class GetInfo
{
public string IdNumber {get; set;}
public PersonData[] PersondataList {get; set;}
}
public class PersonData
{
public string FirstName {get; set;}
public string LastName {get; set;}
}
在SoapUI中测试时,我的回答如下:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://something" xmlns:ns1="http://something1">
<soap:Body>
<ns:MyResponse>
<ns:GetInfo>
<ns1:IdNumber>12345</ns:IdNumber>
<ns1:PersondataList>
<ns1:Persondata>
<ns1:FirstName>John</ns1:FirstName>
<ns1:LastName>Travolta</ns1:LastName>
<ns1:Persondata>
</ns1:PersondataList>
</ns:GetInfo>
</ns:MyResponse>
</soap:Body>
</soap:envelope>
正如您所看到的,原始soap响应与我的复制之间的区别在于Persondata
和FirstName
之前的LastName
标记。在我看来,这是正确的结构,但如前所述,我需要以完全相同的方式复制响应......
如何生成与原始响应相同的结构?我需要编写自己的Serializer吗?是否有任何属性可以标记我的属性?
提前致谢。
答案 0 :(得分:1)
对于那些绊倒这类问题的人。将以下属性添加到您的媒体资源中:
[MessageBodyMember(Namespace = "Some namespace"), XmlElement]
最终结果:
public class GetInfo
{
public string IdNumber {get; set;}
[MessageBodyMember(Namespace = "Some namespace"), XmlElement]
public PersonData[] PersondataList {get; set;}
}