2009-07-21 8 views
0

J'ai ces classes:Pourquoi ne puis-je pas envoyer ma classe personnalisée via mon service Web?

public abstract class CustomField 
{ 
    public String Id { get; set; } 
    public String Name { get; set; } 
    public String Description { get; set; } 
    public FieldType Type { get; set; } 

    public enum FieldType 
    { 
     String = 0, 
     Integer = 1, 
     Boolean = 2, 
     List = 3 
    } 
} 

public class StringCustomField:CustomField 
{ 
    public String Value { get; set; } 
    public Int32 MinLenght { get; set; } 
    public Int32 MaxLenght { get; set; } 

    public StringCustomField() 
    { 
     this.Type = FieldType.String; 
    } 
} 

public class CustomGroup 
{ 
    public String Id { get; set; } 
    public String Name { get; set; } 
    public String Description { get; set; } 
    public List<CustomField> FieldList = new List<CustomField>(); 
} 

Lorsque je tente de transférer CustomGroup dans mon webservice je reçois cette erreur:

The remote server returned an error: NotFound

sérialisation échoue lorsque C# tente de transférer mon StringField dans mon CustomField.

Qu'est-ce que je fais mal?

Marc Gravel dis-moi de le faire et je comprends la solution mais quelque chose ne va pas, pas d'effets, cath la même erreur !! , Aidez-moi!!

[XmlInclude(typeof(StringCustomField))] 
[XmlInclude(typeof(IntegerCustomField))] 
[XmlInclude(typeof(BooleanCustomField))] 
[XmlInclude(typeof(ListCustomField))] 
public abstract class CustomField 
{ 
    public String Id { get; set; } 
    public String Name { get; set; } 
    public String Description { get; set; } 
    public FieldType Type { get; set; } 

    public enum FieldType 
    { 
     String = 0, 
     Integer = 1, 
     Boolean = 2, 
     List = 3 
    } 
} 
+0

Pourquoi le downvote massif? – Will

+0

Sidenote: c'est la longueur, pas la longueur. Cependant, j'avais l'impression que c'était la désérialisation qui serait le problème lorsque vous utilisez des sous-classes. Malheureusement, je ne me souviens pas exactement comment je l'ai résolu. Regardez dans XmlArrayItemAttribute (http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlarrayitemattribute.aspx) – Thorarin

+0

Downvotes étaient en raison de la mauvaise formulation/non professionnelle de la question, les modifications ont pris en charge de cela :) –

Répondre

1

Si vous envoyez des sous-classes comme xml, vous aurez besoin [XmlInclude]:

[XmlInclude(typeof(StringCustomField))] 
public abstract class CustomField 
{...} 

Vous pouvez ajouter plusieurs [XmlInclude(...)] marqueurs pour toutes les autres sous-classes dans le modèle .

+0

Marc j'ai inclus les marqueurs mais chat même erreur? une idée? – JoeLoco

+0

Marc quelque chose change dans mon scénario quand je recompile la solution et essaie de mettre à jour la référence de service du côté client j'attrape une erreur parlant de System.Xml non trouvé, maintenant si je résous ceci !! XD – JoeLoco

+0

Si vous obtenez la même erreur, pourquoi marquer comme répondu? Je ne sais pas ce que la chose System.Xml est sans regarder. –

1

List<CustomField> sérialisera et désérialiser à un CustomField[] si vous utilisez un service Web, non?

1

utilisation

public class CustomGroup 
{ 
    public String Id { get; set; } 
    public String Name { get; set; } 
    public String Description { get; set; } 
    public List<CustomField> FieldList = new List<StringCustomField>(); 

} 

au lieu

+0

Ce n'est pas clair pour moi que ce soit sémantiquement correct. Peut-être y a-t-il d'autres classes dérivées que nous ne connaissons pas (semble probable) qui seraient incluses dans la FieldList. – tvanfosson

+0

Oui plus d'arbre !! BooleanCustomField, IntegerCustomField, ListCustomField !!! L'exemple ci-dessus résout mon problème pour une seule classe dérivée !! – JoeLoco

+0

Ce n'est pas valide dans aucune version de .NET, y compris 4.0 –

0

Si je comprends bien, vous devriez 1. Connectez votre service Web à votre application 2. Utilisez l'espace de noms de la WS, donc toutes les classes seront utilisés à partir du Proxy je ne pense pas que le La classe locale sera comprise correctement par le service Web distant, même si vous utilisez le même assemblage sur les deux parties

+0

les objets sont usés des deux côtés, il n'y a pas de problème pour moi !! Marc Gravell obtenir mon problème !! J'essaie la solution maintenant !! merci opetrov !! – JoeLoco

Questions connexes