Il riferimento al servizio utilizza Array anziché List , anche quando le impostazioni dicono di usare List

Uso Visual Studio 2010 e ho un riferimento a un servizio Web che abbiamo creato. I nostri metodi restituiscono oggetti che contengono proprietà List generiche:

public class ExampleResponse { private System.Collections.Generic.List intValues; [WCF::MessageBodyMember(Name = "IntValues")] public System.Collections.Generic.List IntValues { get { return intValues; } set { intValues= value; } } } 

Sul lato client, crea un file References.cs con int [] invece di List:

 [System.ServiceModel.MessageBodyMemberAttribute(Namespace="SomeNamespace", Order=0)] [System.Xml.Serialization.XmlArrayAttribute(IsNullable=true)] [System.Xml.Serialization.XmlArrayItemAttribute(Namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays", IsNullable=false)] public int[] IntValues; 

Nelle impostazioni di riferimento del servizio, il tipo di raccolta è impostato per utilizzare Elenco, non Array. Eppure, lo sta ancora facendo.

Qualsiasi informazione su come risolvere questo problema sarebbe estremamente utile, sembra non avere senso.

Hai aggiunto un “riferimento di servizio” o un “riferimento Web”? Sembra che il proxy sia stato generato con XmlSerializer invece di DataContractSerializer. Se è stato utilizzato DataContractSerializer, si avranno System.Runtime.Serialization … Attributi invece degli attributi Xml.Serialization …. Come hai generato esattamente questo riferimento web? XmlSerializer aggiornato convertirà tutte le raccolte in Array, dove, come, il serializzatore Datacontract sa come generare .Net DataTypes. Aggiungi riferimento Web utilizza il BTW XmlSerializer.

Inoltre, sono curioso del tuo utilizzo di MessageBodyMember. Perché stai provando a generare i tuoi propri MessageContracts. Messing with MessageContracts può essere molto pericoloso, soprattutto se non sai esattamente cosa stai facendo.

Invece, prova quanto segue:

 [DataContract] public class ExampleResponse { private System.Collections.Generic.List intValues; [DataMember] public System.Collections.Generic.List IntValues { get { return intValues; } set { intValues = value; } } } 

Guarda come funziona per te e facci sapere.

Nel riferimento Aggiungi servizio, è ansible scegliere il tipo da utilizzare per le raccolte. Per qualche motivo, l’array è predefinito. Dopo averlo modificato, ho dovuto eliminare l’intero riferimento e riaggiungerlo, scegliendo Elenco dall’inizio. Ho avuto problemi strani cambiando dopo il fatto.