2010-01-18 8 views
5

Hallo Leute Ich habe eine sehr einfache Klasse namens Person.WCF Read DataMember Name Attribut

Wenn ich versuche zu serialisieren oder deserialisieren, funktioniert alles super. Im XML kann ich ein Tag namens "MeinName" sehen und im Objekt sehe ich mit dem VS Intellisense eine Eigenschaft namens Name. Was ich jetzt brauche, ist der Zugriff auf den serialisierten Namen der Eigenschaft aus dem Objekt. Zum Beispiel kann ich dieses Objekt tun.GetType(). GetProperty ("Name"); aber wenn ich versuche, dieses Objekt zu tun.GetType(). GetProperty ("MyName") die Reflexion sagt, dass die Eigenschaft nicht existiert. Wie kann ich den fortlaufenden Namen der Immobilie lesen? Gibt es einen Weg?

+0

Versuchen Sie dies von der Service-Seite oder der Client-Seite zu tun? –

+0

Von der Client-Seite, und es gibt keine Möglichkeit mit dem DataContractSerializer das Attribut der Eigenschaft zu lesen. Ich habe es auch mit XDocument und Linq versucht. Irgendwelche Vorschläge? – Raffaeu

Antwort

3

Es scheint, dass der einzige Weg, um Zugang ist, mithilfe von Reflektion, die Attribute des Objektes auf diese Weise:

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

Dieses auf beiden Werken, Client und Server, ohne die Notwendigkeit von serialize und Deserialisieren der Objekt.

+1

einige Null-Überprüfung möglicherweise in Ordnung sein, Ihre Antwort nimmt nur ein Attribut, versuchen Sie zu überprüfen, wie folgt: 'var Attribut = (DataMemberAttribute) propertyInfo.GetCustomAttributes (typeof (DataMemberAttribute), false) .FirstOrDefault(); \t \t \t \t if (Attribut! = Null) \t \t \t \t \t name = attribute.Name; ' – Myster