2011-01-18 12 views
7

entiendo que podemos tener más controles en una clase si utilizamos DataContract, sin embargo, tenga en cuenta los siguientes 2 casosWCF DataContract vs serializar la clase

[DataContract] 
public class Customer 
{ 
    [DataMember] 
    public string CustomerName {get; set;} 

    [DataMember] 
    public int Age{get; set;} 
} 

y

public class Customer 
{ 
    public string CustomerName {get; set;} 
    public int Age{get; set;} 
} 

Ambos reciben serializado correctamente en el cliente .net. Y personalmente no uso el segundo ejemplo. ¿Alguien puede señalarme las diferencias en las 2 clases? Quería enviar todas las propiedades públicas en ambas clases.

+0

@decyclone Muchas gracias por la corrección de diseño, he intentado varias veces, pero todavía tengo la primera línea en blanco problema molesto. – Yuan

Respuesta

5

La segunda versión es la versión POCO (objeto CLR simple) de su contrato de datos y se puede usar con WCF desde 3.5 sp1.

yo no recomendaría el uso de ella sin embargo, ya que le da muy poco control sobre la serialización (atributos de espacio de nombres ...) y se acopla a sus entidades de servicio con sus entidades de negocios (que pueden ser iguales con POCO)

+0

¿Será la segunda versión expuesta por wsdl? – Yuan

+0

@Yuan: después de 'WCF 3.5 SP1', sí. – decyclone

4

de todos modos aquí es una mejor historia de "servicios WCF programación, 3rd Edition"

Mientras se utiliza el atributo Serializable es eficaz, no es ideal para interacción orientada al servicio entre clientes y servicios. En lugar de que denota todos los miembros en un tipo como serializable y por lo tanto parte del esquema de datos para ese tipo, sería preferible tener un enfoque de opt-in, donde sólo los miembros del desarrollador contrato quiere incluir explícitamente en el contrato de datos están incluidos. El atributo Serializable obliga a los datos Tipo ser serializable con el fin de ser utilizado como parámetro en una operación de contrato , y que no ofrece limpia separación entre la capacidad de utilizar el tipo como un parámetro de operación de WCF (el aspecto de "servicio" del tipo) y la capacidad de serializarlo. El atributo no ofrece soporte para los nombres o miembros del tipo de aliasing , o para asignando un nuevo tipo a un contrato de datos predefinido. El atributo opera directamente en los campos de miembro y omite por completo cualquier propiedad lógica utilizada para acceder a esos campos . Sería mejor permitir esas propiedades para agregar sus valores al acceder a los campos. Finalmente, no hay soporte directo para el control de versiones , porque el formateador supuestamente captura todas las versiones información. En consecuencia, es difícil lidiar con el control de versiones durante el tiempo .

Cuestiones relacionadas