2016-09-06 4 views
1

Ich habe eine WCF-SOAP-Service in C#, die perfekt läuft. Aber jetzt möchte ich die Datentypen zur SOAP-Antwort hinzufügen.WCF SOAP Service hinzufügen Datentypen als Antwort auf komplexe Typen

Wenn ich ein Array von boolean oder String zurück bekomme ich so etwas wie:

<a:elements xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
     <b:string>ID</b:string> 
     <b:string>Description</b:string> 
     <b:string>Material</b:string> 
     <b:string>Price</b:string> 
    </a:elements> 

oder

<a:updatePermissions xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
     <b:boolean>true</b:boolean> 
     <b:boolean>false</b:boolean> 
     <b:boolean>false</b:boolean> 
     <b:boolean>false</b:boolean> 
    </a:updatePermissions > 

Aber wenn ich einen komplexen Typ i wie

bekommen etwas senden
<a:Elements> 
     <a:Material> 
     <a:Id>465</a:Id> 
     <a:Description>TestAddMaterial</a:Description> 
     <a:MaterialId>1</a:MaterialId> 
     <a:PriceForKg>0.03</a:PriceForKg> 
     </a:Material> 
</a:Elements> 

Wie kann ich die Antwort komplexer Typen wie die Antwort eines Arrays konvertieren?

Etwas wie:

<a:Elements> 
     <a:Material> 
     <a:integer>465</a:integer> 
     <a:string>TestAddMaterial</a:string> 
     <a:integer>1</a:integer> 
     <a:double>0.03</a:double> 
    </a:Material> 
    </a:Elements> 

Der Name des Variable ist an dieser Stelle nicht notwendig.

Die Klasse selbst ist ein DataContract mit DataMember.

+0

Meiner Meinung nach würde das gegen die beste Praxis gehen und ich bin mir nicht sicher, ob es wirklich möglich ist, nicht ohne eine beträchtliche Menge an Arbeit, die ich mir vorstellen würde. – mbrdev

+0

Okay, was würdest du empfehlen, um den Typ zu bekommen? Gibt es eine einfache Möglichkeit, den Typ als Attribut hinzuzufügen? – SPI

Antwort

1

Technisch können Sie XElement zurückgeben. Für jede benutzerdefinierte XML-Option müssen Sie das XML selbst erstellen.

Als Beispiel:

[ServiceContract] 
public interface ISomeService 
{ 
    [OperationContract, XmlSerializerFormat] 
    XmlElement SomeMethod(XmlElement someParameter); 
} 

Sie auch die Eigenschaft Document eines XmlDocument Instanz als Standard DataContractSerializer XmlElement Instanzen verwenden können serialisiert werden können.

https://msdn.microsoft.com/en-us/library/ms733901.aspx

Obwohl die oben genannten Optionen sind nicht üblich. Stattdessen sollten Sie ein DataContract verwenden und es sollte so strukturiert sein, wie Sie es in XML serialisieren möchten. Wenn die Servicemethode den benutzerdefinierten Typ zurückgibt, wird sie von WCF implizit in ein XML-Dokument serialisiert.