2013-11-22 13 views
5

Ho classe BookDTO che rappresenta oggetto che sarà utilizzato nello scambio di dati tra client e il servizio dove il servizio è servizio WCF hanno seguenti attributimodo corretto di decorare dto classe nella comunicazione WCF

[Serializable] 
[DataContract] 
[KnownType(typeof(Book))] 
public class BookDTO {...} 

È questo il vero e proprio (di serie) modo di decorare l'oggetto che verrà inviato sul filo? esempi che ho visto con

[DataContract(NameSpace="somenamespace.DTO.Book")] 

Is [KnownType(typeof(Book))] redudant qui?

Ho dimenticato di menzionare che mi sono introdotto con gli attributi DataMember, quindi per favore ignoratelo.

+2

L'attributo KnownType viene utilizzato per le classi derivate "de/serializzare". Se l'attributo non è presente, il serializzatore non saprà come dovrebbe "trasmettere" i tipi di base in tipi concreti. –

+0

No Non lo è. È richiesto e la ragione è decifrata http://stackoverflow.com/questions/3167932/c-sharp-wcf-when-is-it-appropriate-to-use-the-knowntype-attribute. – Ehsan

+0

Inoltre non è necessario l'attributo '[Serializable]'. – Josh

risposta

3

In realtà quando si utilizza la metatag DataContract, Serializable Metatag non fa nulla. Questa è una citazione da MSDN articolo:

Con [Serializzabile], tutti i campi diventano parte del contratto dati (a meno che non siano contrassegnati con [Non serializzato]). Con [DataContract], sono inclusi solo i membri contrassegnati con [DataMember]. Si noti che se un tipo ha sia [DataContract] e [Serializable] attributi su di esso, si utilizzerà il KnownType [DataContract] mappatura

http://msdn.microsoft.com/en-us/magazine/cc163569.aspx

atrribute Marvin descritto a voi in un commento alla tua domanda.

2

La classe seguente è una semplice DTO:

[DataContract] 
public class DataTransferObjectExample 
{ 
    [DataMember] 
    public string ExampleData { get; set; } 
} 

Tutto il resto sarebbe per casi particolari che possiamo verificare solo se si posta intero codice.

Problemi correlati