WCF响应 - 响应中列表的序列化

时间:2017-03-01 13:43:48

标签: c# wcf soap

我试图复制一个现在正在生产的旧肥皂服务。合同,请求和响应必须是完全相同,以便我们不需要更新使用此服务的所有相关系统。这个老肥皂服务的事情是,其中一个回应是非常奇怪的。它具有以下结构:

<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响应与我的复制之间的区别在于PersondataFirstName之前的LastName标记。在我看来,这是正确的结构,但如前所述,我需要以完全相同的方式复制响应......

如何生成与原始响应相同的结构?我需要编写自己的Serializer吗?是否有任何属性可以标记我的属性?

提前致谢。

1 个答案:

答案 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;}
}