.net - serializar - ¿Qué tipo de lista/colección es mejor utilizar en un contrato de datos WCF?
serializar y deserializar json c# (3)
Aparte del hecho de que no puede usar tipos de interfaz, en realidad no importa cuál de los tipos de colección usa. El cliente de tu servicio nunca los verá.
Recuerde que los servicios web proporcionan una descripción del servicio al cliente en términos de WSDL o mex. En el caso de WSDL, el cliente recibirá un esquema XML que describe los mensajes que se enviarán y recibirán. En el caso de una colección, el cliente simplemente verá un elemento con maxOccurs = "unbounded" en lugar de uno con maxOccurs = "1". El cliente puede interpretar esto como una matriz, o lista, o lo que sea. Independientemente de la colección que devuelva de su servicio, el cliente verá maxOccurs = "unbounded" y lo interpretará como desee.
La excepción sería devolver un diccionario de algún tipo, y no sé cómo funciona.
Al definir un contrato de datos de WCF, ¿qué tipo debería usarse para las colecciones / listas?
- ¿Debería ser ICollection <T>, IList <T>, T [] o ...?
- ¿Debo usar tipos de interfaz o los tipos concretos?
- ¿Qué compensaciones hay que considerar?
No puede usar el tipo de interfaz en datacontract porque el serializador no funcionará con las propiedades de tipo de interfaz.
Puede usar el tipo concreto, por ejemplo, MyClass [] o List
Nota: estoy respondiendo esto desde la perspectiva del cliente, es decir, el /collectionType:<type>
en svcutil.exe
(también disponible en el IDE).
Personalmente, tiendo a mantenerlo simple y usar la List<T>
. Si va a hacer muchos enlaces de datos, BindingList<T>
podría ser una opción, pero para las propiedades de los objetos suele ser una exageración. Las matrices hacen la vida muy difícil ... evítalas ;-p
Tenga en cuenta que con .NET 3.5, las funciones disponibles para cada tipo de colección son borrosas, gracias a los métodos de extensión en Enumerable
.
Normalmente, la Collection<T>
es útil cuando cree que puede querer subclasificar la colección para usar los puntos de extensión virtual
. Esto no es realmente una opción con WCF.
Como ya se dijo, el uso de IList<T>
etc. no es una opción a menos que esté utilizando el uso compartido de ensamblajes, ya que la clase generada no podrá crear la colección.