2010-01-18 13 views
5

Ciao Ragazzi Ho una classe molto semplice chiamata persona.WCF Lettura Dati Nome attributo

Se tento di serializzare o de-serializzare, tutto funziona alla grande. Nell'XML posso vedere un tag chiamato "MyName" e nell'oggetto vedo con VS Intellisense una proprietà chiamata Name. Quello di cui ho bisogno ora è di accedere, dall'oggetto, al nome serializzato della proprietà. Ad esempio, posso eseguire questo oggetto.GetType(). GetProperty ("Name"); ma se provo a fare questo object.GetType(). GetProperty ("MyName") il riflesso dice che la proprietà non esiste. Come posso leggere il nome serializzato della proprietà? C'è un modo?

+0

Stai provando a farlo dal lato del servizio o dal lato client? –

+0

Dal lato client, e DataContractSerializer non è in grado di leggere l'attributo della proprietà. Ho provato anche con XDocument e Linq. Eventuali suggerimenti? – Raffaeu

risposta

3

Sembra che l'unico modo è quello di accesso, utilizzando la riflessione, gli attributi della proprietà in questo modo:

var att = myProperty.GetType().GetAttributes(); 
var attribute = property.GetCustomAttributes(false)[0] as DataMemberAttribute; 
Console.WriteLine(attribute.Name); 

Questo funziona su entrambi, client e server, senza la necessità di serializzare e deserializzare il oggetto.

+1

alcuni controlli null possono essere in ordine, la tua risposta assume solo un attributo, prova a controllare in questo modo: 'var attributo = (DataMemberAttribute) propertyInfo.GetCustomAttributes (typeof (DataMemberAttribute), false) .FirstOrDefault(); \t \t \t \t se (attributo! = Null) \t \t \t \t \t name = attribute.Name; ' – Myster