2010-12-06 20 views
1

J'ai un service WCF REST qui expose une douzaine d'objets et basé sur les appels d'itinéraires au format url à travers 3 méthodes différentes. Par exemple:WCF REST Xml Réponse Typing

Protected Function [get](ByVal objType As String, ByVal id As String, ByVal propertyList As String, ByVal token As String) As Object 

Chacune de ces méthodes retourne un objet ou BaseObj (à partir de laquelle tous nos types retournés hériteront). Le problème ultime, cependant, est que quand je regarde le XML, je reçois un wrapper comme:

<ArrayOfBaseObj xmlns="http://objects/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <BaseObj i:type="Event"> 
     <!-- Event object details --> 
    </BaseObj> 
</ArrayOfBaseObj> 

au lieu d'éléments tapé le même que l'objet réel qui est retourné comme:

<ArrayOfEvent xmlns="http://objects/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <Event> 
     <!-- Event object details --> 
    </Event> 
</ArrayOfEvent> 

est-il de toute façon pour faire le sérialiseur XML utiliser le nom de type pour les éléments d'emballage plutôt que le type de base? JSON semble renvoyer le type correctement, c'est juste la sérialisation xml que je ne suis pas complètement attisé.

Répondre

0

Vous devez ajouter l'attribut [CollectionDataContract]. Consultez l'article http://msdn.microsoft.com/en-us/library/dd203052.aspx pour plus d'informations.

+0

Donc, il n'y a pas d'autre moyen de le faire, sauf avoir une autre classe qui représente une liste spécifique de chaque type dans notre système? –