WCF读取DataMember Name属性

5
我有一个非常简单的类叫做person。
public class Person{
   [DataMember(Name="MyName")]
   public string Name { get;set;}
}

如果我尝试进行序列化或反序列化,一切都很顺利。在XML中,我可以看到一个名为"MyName"的标签,在对象中,我可以通过VS Intellisense看到一个名为Name的属性。
现在我需要做的是从对象中访问属性的序列化名称。
例如,我可以执行object.GetType().GetProperty("Name");,但是如果我尝试执行object.GetType().GetProperty("MyName"),反射会说该属性不存在。我如何读取属性的序列化名称?有办法吗?

你是在服务端还是客户端尝试做这件事? - Tad Donaghe
从客户端来看,使用DataContractSerializer无法读取属性的属性。我也尝试过使用XDocument和Linq。有什么建议吗? - Raffaeu
1个回答

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(); if (attribute != null) name = attribute.Name; - Myster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接