2010-01-18 37 views
5

Xin chào các bạn Tôi có một lớp học rất đơn giản được gọi là người.WCF Đọc dữ liệuTên thuộc tính Tên

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

Nếu tôi cố gắng serialize hoặc de-serialize, mọi thứ hoạt động tốt. Trong XML, tôi có thể thấy một thẻ tên là "MyName" và trong đối tượng tôi thấy với VS Intellisense một thuộc tính được gọi là Name. Những gì tôi cần bây giờ là để acces, từ đối tượng, tên serialized của tài sản. Ví dụ, tôi có thể làm đối tượng này.GetType(). GetProperty ("Name"); nhưng nếu tôi cố gắng thực hiện đối tượng này.GetType() GetProperty ("MyName") thì sự phản chiếu nói rằng thuộc tính không tồn tại. Làm cách nào tôi có thể đọc tên đã được đăng của tài sản? Là có một cách?

+0

Bạn đang cố thực hiện điều này từ phía dịch vụ hoặc phía máy khách? –

+0

Từ phía máy khách và không có cách nào với DataContractSerializer để đọc thuộc tính của thuộc tính. Tôi cũng đã thử với XDocument và LINQ. Bất kỳ đề xuất? – Raffaeu

Trả lời

3

Có vẻ như rằng cách duy nhất là tiếp cận, sử dụng phản chiếu, các thuộc tính của các tài sản theo cách này:

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

này hoạt động trên cả hai, client và server, mà không cần serialize và deserialize vật.

+1

một số kiểm tra null có thể được theo thứ tự, câu trả lời của bạn giả định chỉ có một thuộc tính, hãy thử kiểm tra như vậy: 'var attribute = (DataMemberAttribute) propertyInfo.GetCustomAttributes (typeof (DataMemberAttribute), false) .FirstOrDefault(); \t \t \t \t if (thuộc tính = null!) \t \t \t \t \t name = attribute.Name; ' – Myster

Các vấn đề liên quan