2010-08-09 19 views
0

J'ai un service WCF.
Renvoie le type ci-dessous. Je reçois les données au premier niveau mais pas les données dans les listes imbriquées ... Quel pourrait être mon problème?ayant des problèmes pour renvoyer ce type dans un appel de service WCF asynchrone à partir de Silverlight

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace slCF2.Web 
{ 
    public class Customer 
    { 
     string _firstname; 
     string _lastname;    
     List<BO> _bos; 
     List<AO> _aos; 



     public string FirstName 
     { 
      get { return _firstname; } 
      set { _firstname = value; } 
     } 

     public string LastName 
     { 
      get { return _lastname; } 
      set { _lastname = value; } 
     } 

     public System.Collections.Generic.List<AvailableOption> AvailableOptions 
     { 
      get { return _availableoptions; } 
      set { _availableoptions = value; } 
     } 

     public System.Collections.Generic.List<BuiltOption> BuiltOptions 
     { 
      get { return _builtoptions; } 
      set { _builtoptions = value; } 
     } 

    } 
    [Serializable] 
    public class AO 
    { 
     string _code; 

     public string Code 
     { 
      get { return _code; } 
      set { _code = value; } 
     } 

    } 
    [Serializable] 
    public class BO 
    { 
     string _code; 

     public string Code 
     { 
      get { return _code; } 
      set { _code = value; } 
     } 

    } 
} 

Répondre

0

je mettrais [DataContract] attributs sur les classes et [DataMember] sur toutes les propriétés que vous souhaitez inclure dans les messages WCF.

[DataContract] 
public class Customer 
{ 
    string _firstname; 
    string _lastname;    
    List<BO> _bos; 
    List<AO> _aos; 

    [DataMember] 
    public string FirstName 
    { 
     get { return _firstname; } 
     set { _firstname = value; } 
    } 

    [DataMember] 
    public string LastName 
    { 
     get { return _lastname; } 
     set { _lastname = value; } 
    } 

    [DataMember] 
    public System.Collections.Generic.List<AvailableOption> AvailableOptions 
    { 
     get { return _availableoptions; } 
     set { _availableoptions = value; } 
    } 

    [DataMember] 
    public System.Collections.Generic.List<BuiltOption> BuiltOptions 
    { 
     get { return _builtoptions; } 
     set { _builtoptions = value; } 
    } 
} 

[DataContract] 
public class AO 
{ 
    string _code; 

    [DataMember] 
    public string Code 
    { 
     get { return _code; } 
     set { _code = value; } 
    } 
} 

[DataContract] 
public class BO 
{ 
    string _code; 

    [DataMember] 
    public string Code 
    { 
     get { return _code; } 
     set { _code = value; } 
    } 
} 

Avec WCF, ce n'est dans .NET 3.5 SP1 est plus un must-have des critères, mais juste pour être clair et explicite dans mon intention, je serais encore mis ceux de toute façon. Vous devez décorer toutes classes et leurs propriétés avec celles - même classes imbriquées et descendant etc.

En outre, le [Serializable] attribut que vous utilisez ne pas vraiment rien à voir avec la sérialisation des messages WCF. WCF utilise soit le sérialiseur de contrat de données (par défaut) en utilisant les attributs [DataContract]/[DataMember], soit le XmlSerializer (facultatif, fonctionne également sans l'attribut [Serializable]).