Puis-je arrêter mon WCF générer ArrayOfString au lieu de string[] ou List<string>

Je vais avoir un problème mineur avec WCF service des procurations où le message contient List<string> en tant que paramètre.

Je suis en utilisant le 'Ajouter une référence de Service" dans Visual Studio pour générer une référence à mon service.

   //portion of my web service message
   public List<SubscribeInfo> Subscribe { get; set; }
   public List<string> Unsubscribe { get; set; }

Ce sont les propriétés générées sur mon MsgIn pour l'un de mes méthodes web.
Vous pouvez le voir utilisé ArrayOfString quand je suis en utilisant List<string>, et l'autre prend List<SubscribeInfo> - qui correspond à mon origine C# de l'objet ci-dessus.

[System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)]
public System.Collections.Generic.List<DataAccess.MailingListWSReference.SubscribeInfo> Subscribe {
    get {
        return this.SubscribeField;
    }
    set {
        if ((object.ReferenceEquals(this.SubscribeField, value) != true)) {
            this.SubscribeField = value;
            this.RaisePropertyChanged("Subscribe");
        }
    }
}

[System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)]
publicDataAccess.MailingListWSReference.ArrayOfString Unsubscribe {
    get {
        return this.UnsubscribeField;
    }
    set {
        if ((object.ReferenceEquals(this.UnsubscribeField, value) != true)) {
            this.UnsubscribeField = value;
            this.RaisePropertyChanged("Unsubscribe");
        }
    }
}

La ArrayOfString classe générée ressemble à ceci. C'est une classe générée dans mon code, ce n'est pas un .NET de la classe. Il en fait généré en moi une classe qui hérite de la Liste, mais je n'avais pas la "décence" pour créer des me toute les constructeurs.

    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
    [System.Runtime.Serialization.CollectionDataContractAttribute(Name="ArrayOfString", Namespace="http://www.example.com/", ItemName="string")]
    [System.SerializableAttribute()]
    public class ArrayOfString : System.Collections.Generic.List<string> {
    }

Le problème est que j'ai souvent créer mon message comme ceci :

client.UpdateMailingList(new UpdateMailingListMsgIn()
{
    Email = model.Email,
    Name = model.Name,
    Source = Request.Url.ToString(),
    Subscribe = subscribeTo.ToList(),
    Unsubscribe = unsubscribeFrom.ToList()
});

J'aime vraiment le look propre, cela me donne.

Maintenant pour le problème réel :

Je ne peux pas attribuer un List<string> à la Unsubscribe propriété qui est un ArrayOfString - même si il hérite de la Liste. En fait, je ne peux pas l'air de trouver QUELQUE sorte de l'attribuer sans supplément de déclarations.

J'ai essayé ce qui suit :

  • new ArrayOfString(unsubscribeFrom.ToList()) - ce constructeur n'existe pas 🙁
  • de changer le type de la matrice utilisée par le générateur de code - ne fonctionne pas - il me donne toujours ArrayOfString (!?)
  • essayez de lancer List<string> à ArrayOfString - échoue avec "impossible de lancer', même si il compile un peu fine
  • créer new ArrayOfString() et puis AddRange(unsubscribeFrom.ToList()) - fonctionne, mais je ne peux pas tout faire en une seule instruction
  • créer une fonction de conversion ToArrayOfString(List<string>), qui fonctionne, mais n'est pas aussi propre que je veux.

Son seul de le faire pour de chaîne, ce qui est ennuyeux.

Suis-je raté quelque chose? Est-il un moyen de lui dire de ne pas générer ArrayOfString - ou de quelque autre truc pour l'attribuer ?

OriginalL'auteur Simon_Weaver | 2009-02-03