2010-01-18 4 views
5

Привет, ребята У меня очень простой класс, называемый человеком.WCF Read DataMember Атрибут имени

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

Если я попытаюсь сериализовать или де-сериализовать, все будет отлично. В XML я могу увидеть тег под названием «MyName», а в объекте, который я вижу с VS Intellisense, называется именем. Теперь мне нужно получить доступ к объекту, сериализованному имени свойства. Например, я могу сделать этот object.GetType(). GetProperty («Name»); но если я попытаюсь сделать этот object.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

Некоторая проверка нуля может быть в порядке, ваш ответ принимает только один атрибут, попробуйте проверить так: var var = = DataMemberAttribute. \t \t \t \t если (атрибут! = NULL) \t \t \t \t \t имя = attribute.Name; ' – Myster

 Смежные вопросы

  • Нет связанных вопросов^_^