2010-01-18 17 views
5

हाय दोस्तों मेरे पास एक बहुत ही सरल वर्ग है जिसे व्यक्ति कहा जाता है।डब्ल्यूसीएफ पढ़ें डेटामेम्बर नाम विशेषता

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

यदि मैं क्रमबद्ध करने या डी-क्रमबद्ध करने का प्रयास करता हूं, तो सबकुछ बढ़िया काम करता है। एक्सएमएल में मैं "माईनाम" नामक एक टैग देख सकता हूं और उस ऑब्जेक्ट में जिसे मैं वीएस इंटेलिसेंस के नाम से नामित संपत्ति देखता हूं। मुझे अब क्या चाहिए, वस्तु से, संपत्ति का क्रमबद्ध नाम acces करना है। उदाहरण के लिए, मैं यह ऑब्जेक्ट कर सकता हूं। गेट टाइप()। GetProperty ("name"); लेकिन अगर मैं इस ऑब्जेक्ट को करने का प्रयास करता हूं। गेट टाइप()। गेटप्रोपर्टी ("माईनाम") प्रतिबिंब कहता है कि संपत्ति मौजूद नहीं है। मैं संपत्ति के क्रमबद्ध नाम को कैसे पढ़ सकता हूं? क्या उधर रास्ता है?

+0

क्या आप इसे सेवा पक्ष या ग्राहक पक्ष से करने की कोशिश कर रहे हैं? –

+0

ग्राहक पक्ष से, और संपत्ति के गुण को पढ़ने के लिए DataContractSerializer के साथ कोई रास्ता नहीं है। मैंने XDocument और Linq के साथ भी कोशिश की। कोई सुझाव? – Raffaeu

उत्तर

3

ऐसा लगता है कि एक ही रास्ता, उपयोग करने के लिए है प्रतिबिंब का उपयोग कर, इस तरह से संपत्ति की विशेषताओं:

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

यह दोनों, क्लाइंट और सर्वर पर काम करता है, serialize की आवश्यकता के बिना और deserialize वस्तु।

+1

कुछ शून्य जांच क्रम में हो सकती है, आपका उत्तर केवल एक विशेषता मानता है, इस तरह की जांच करने का प्रयास करें: 'var विशेषता = (डेटामेम्बरएट्रिब्यूट) propertyInfo.GetCustomAttributes (टाइपऑफ (डेटामेम्बरएट्रिब्यूट), झूठा)। फर्स्टऑर्डडिल्ट(); \t \t \t \t अगर (गुण = अशक्त!) \t \t \t \t \t नाम = attribute.Name; ' – Myster

संबंधित मुद्दे