2010-01-18 10 views
5

Hola chicos Tengo una clase muy simple llamada persona.WCF Read DataMember Name attribute

public class Person{ 
    [DataMember(Name="MyName")] 
    public string Name { get;set;} 
} 

Si intento serializar o deserializar, todo funciona bien. En el XML, puedo ver una etiqueta llamada "MyName" y en el objeto veo con el VS Intellisense una propiedad llamada Name. Lo que necesito ahora es acceder, desde el objeto, al nombre serializado de la propiedad. Por ejemplo, puedo hacer este objeto.GetType(). GetProperty ("Nombre"); pero si trato de hacer este objeto. GetType(). GetProperty ("MyName") la reflexión dice que la propiedad no existe. ¿Cómo puedo leer el nombre serializado de la propiedad? ¿Hay alguna manera?

+0

¿Está tratando de hacer esto desde el lado del servicio o del lado del cliente? –

+0

Desde el lado del cliente, y no hay forma de que el DataContractSerializer lea el atributo de la propiedad. Lo intenté también con XDocument y Linq. ¿Alguna sugerencia? – Raffaeu

Respuesta

3

Parece que la única manera de hacerlo es el acceso, utilizando la reflexión, los atributos de la propiedad de esta manera:

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

Esto funciona en ambos, el cliente y el servidor, sin la necesidad de serializar y deserializar la objeto.

+1

es posible que haya alguna comprobación nula, su respuesta solo asume un atributo, intente marcar de esta manera: 'var attribute = (DataMemberAttribute) propertyInfo.GetCustomAttributes (typeof (DataMemberAttribute), false) .FirstOrDefault(); \t \t \t \t si (atributo! = Null) \t \t \t \t \t name = attribute.Name; ' – Myster