2010-01-18 4 views
5

안녕 얘들 아 나는 사람이라고하는 매우 간단한 클래스가 있습니다.WCF 데이터 멤버 이름 속성 읽기

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

모든 것을 직렬화하거나 비 직렬화하면 모든 것이 잘 작동합니다. XML에서 "MyName"이라는 태그를 볼 수 있으며 VS Intellisense에서 Name이라는 속성에 표시되는 개체에서 볼 수 있습니다. 지금 필요한 것은 객체에서 일련 번호가 지정된 속성에 액세스하는 것입니다. 예를 들어,이 object.GetType()을 할 수 있습니다. GetProperty ("Name"); 하지만이 개체를하려고하면 .GetType(). GetProperty ("MyName") 반영 속성이 존재하지 않는다고 말한다. 재산의 일련 번호를 어떻게 읽을 수 있습니까? 방법이 있습니까?

+0

서비스 측 또는 클라이언트 측에서이 작업을 수행하려고합니까? –

+0

클라이언트 측에서 DataContractSerializer를 사용하여 속성의 특성을 읽을 방법이 없습니다. 나는 XDocument와 Linq도 시도했다. 어떤 제안? – Raffaeu

답변

3

그것은 유일한 방법은 반사를 사용하여 액세스 할 것 같다, 이런 식으로 속성의 속성 : 직렬화의 필요없이이 모두 클라이언트와 서버에서 작동

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

는, 그리고 직렬화 목적.

+1

일부 null 검사가 순서대로 수행 될 수 있습니다. 하나의 특성 만 가정하면 대답을 확인하십시오. var 특성 = (DataMemberAttribute) propertyInfo.GetCustomAttributes (typeof (DataMemberAttribute), false) .FirstOrDefault(); \t \t \t \t 경우 (속성 = NULL!) \t \t \t \t \t NAME = attribute.Name; ' – Myster