2010-01-18 92 views
5

嗨,伙计们我有一个非常简单的类叫做person。WCF读取DataMember名称属性

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

如果我尝试序列化或反序列化,一切都很好。在XML中,我可以看到一个名为“MyName”的标签,并在VS Intellisense中看到名为Name的属性。 我现在需要的是从对象访问属性的序列化名称。例如,我可以做这个object.GetType()。GetProperty(“Name”);但如果我尝试做这个object.GetType()。GetProperty(“我的名字”)反射说,该属性不存在。我如何阅读财产的序列化名称?有没有办法?

+0

你想从服务端或客户端做到这一点? – 2010-01-18 19:46:12

+0

从客户端,DataContractSerializer无法读取属性的属性。我也试着用XDocument和Linq。有什么建议么? – Raffaeu 2010-01-18 19:53:56

回答

3

看来,唯一的办法是访问,使用反射,这样的财产属性:

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

这部作品既,客户端和服务器,而不需要序列化和反序列化目的。

+1

一些空的检查可能是有序的,你的答案只假设一个属性,试着检查像这样:'var attribute =(DataMemberAttribute)propertyInfo.GetCustomAttributes(typeof(DataMemberAttribute),false).FirstOrDefault(); \t \t \t \t如果(属性!= NULL) \t \t \t \t \t名= attribute.Name;' – Myster 2012-04-23 04:24:37

相关问题