2017-03-01 2 views
1

Ich versuche, einen alten Seifenservice zu replizieren, der im Moment in Produktion ist. Der Vertrag, Anfragen und Antworten müssen die genau selben sein, so dass wir nicht alle abhängigen Systeme aktualisieren müssen, die diesen Dienst verwenden. Die Sache mit diesem alten Seifenservice ist, dass eine der Antworten ziemlich komisch ist. Es hat die folgende Struktur:WCF-Antwort - Serialisierung von Listen in Antwort

<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> 

Diese immiditaly macht mich im Code der folgenden Struktur zu denken:

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

Wenn diese Prüfung in SoapUI, meine Antwort sind die folgenden:

<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> 

Wie Sie sehen können, ist der Unterschied zwischen der ursprünglichen Soap-Antwort und meiner Replikation der Persondata-Tag vor FirstName und LastName . Meiner Meinung nach ist dies die korrekte Struktur, aber wie bereits erwähnt, muss ich die Antwort auf genau die gleiche Weise replizieren ...

Wie kann ich die gleiche Struktur wie die ursprüngliche Antwort erzeugen? Muss ich meinen eigenen Serializer schreiben? Gibt es Attribute, mit denen ich meine Eigenschaften kennzeichnen kann?

Vielen Dank im Voraus.

Antwort

1

Für diejenigen von Ihnen stolpern über diese Art von Problemen. Fügen Sie das folgende Attribut, um Ihr Eigentum:

[MessageBodyMember(Namespace = "Some namespace"), XmlElement] 

Das Endergebnis:

public class GetInfo 
{ 
    public string IdNumber {get; set;} 

    [MessageBodyMember(Namespace = "Some namespace"), XmlElement] 
    public PersonData[] PersondataList {get; set;} 
} 
Verwandte Themen