2011-01-18 3 views
7

ho capito che possiamo avere più controlli su una classe se usiamo DataContract, tuttavia, prendere in considerazione i seguenti 2 casiWCF DataContract vs classe serializzare

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

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

e

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

Entrambi ottenere serializzato correttamente su .net client. E personalmente non uso il secondo esempio. Qualcuno può indicarmi le differenze nelle 2 classi? Intendevo inviare tutte le proprietà pubbliche in entrambe le classi.

+0

@decyclone Grazie mille per la correzione del layout, ho provato diverse volte, ma ho ancora il fastidioso problema con la prima riga vuota. – Yuan

risposta

5

La seconda versione è la versione POCO (semplice vecchio oggetto CLR) del contratto dati e può essere utilizzata con WCF dal 3.5 sp1.

non mi consiglia di utilizzarlo anche se, come ti dà un controllo molto poco sulla serializzazione (attributi namespace ...) e si accoppia tuoi entità di servizio con i vostri soggetti commerciali (che può essere lo stesso con POCO)

+0

La seconda versione sarà esposta da wsdl? – Yuan

+0

@Yuan: dopo 'WCF 3.5 SP1', sì. – decyclone

4

in ogni caso ecco un miglior storia da "servizi WCF di programmazione, 3rd Edition"

Mentre si utilizza l'attributo Serializable è praticabile, non è l'ideale per l'interazione service-oriented tra clienti e servizi. Invece di che denota tutti i membri di un tipo come serializzabile e quindi parte dello schema di dati per quel tipo, sarebbe preferibile avere un approccio opt-in, dove solo i membri lo sviluppatore contratto vuole includere esplicitamente nel contratto dati sono inclusi. L'attributo Serializable costringe i dati tipo da serializzabile per essere utilizzato come parametro in un'operazione contratto , e non offre pulito separazione tra la possibilità di utilizzare tipo come parametro un'operazione WCF (l'aspetto "serviceness" del tipo) e la possibilità di serializzarlo. L'attributo non offre supporto per i nomi oi membri del tipo di aliasing o per mappare un nuovo tipo a un contratto dati predefinito. L'attributo opera direttamente nei campi membri e ignora completamente le proprietà logiche utilizzate per accedere ai campi . Sarebbe meglio consentire a queste proprietà di aggiungere i loro valori quando si accede ai campi. Infine, non è disponibile il supporto diretto per il controllo delle versioni , poiché il formattatore acquisisce tutte le informazioni sulla versione . Di conseguenza, è difficile da gestire con il controllo delle versioni oltre il tempo .