2011-06-03 11 views
6

पर नई कक्षाएं बनाना संभव है हाय क्या सी # में नई कक्षाएं बनाना संभव है, कक्षाएं जो एप्लिकेशन को एक्सएमएल से पढ़ती हैं और घोषित करती हैं कि वे एक्सएमएल से भी विशेषताएं पढ़ रहे हैं। जैसे:क्या रनटाइम सी #

<item id=1> 
<Name>John</Name> 
<Surname>Kennedy</Surname> 
<Age>24</Age> 
</item> 

बेस्ट।

+0

आप वास्तव में एक नया, पहले कभी न देखा, * प्रकार *, या सिर्फ एक नया * उदाहरण के लिए एक मौजूदा के * बनाने मतलब है प्रकार? –

+0

यदि आप उपरोक्त xml के साथ कक्षा बनाने की कोशिश कर रहे हैं, तो यह बेहद अपर्याप्त है। उदाहरण के लिए, आयु का प्रकार क्या होगा? int, uint, लघु, बाइट? या आप सभी फ़ील्ड को स्ट्रिंग के रूप में स्टोर करना चाहते हैं? –

+0

ऐसा लगता है कि आप एक नया प्रकार बनाने के बजाय प्रकार आइटम ('व्यक्ति') का उदाहरण बनाने की कोशिश कर रहे हैं। –

उत्तर

9

हां यह सिस्टम के साथ है। रिफ्लेक्शन। नामस्थान दर्ज करें।

लेकिन .NET 4.0 में आप इसके लिए गतिशील कीवार्ड का उपयोग कर सकते हैं। जैसा इस http://blogs.msdn.com/b/mcsuksoldev/archive/2010/02/04/dynamic-xml-reader-with-c-and-net-4-0.aspx

गतिशील बिना

, भले ही आप नया वर्ग बनाते हैं, आप उनके गुणों

+1

अच्छा संदर्भ। –

+0

मैं यह भी जोड़ूंगा कि उसे शायद पूरी तरह से नई कक्षा की आवश्यकता नहीं है, और एक्सएमएल के साथ काम करना आमतौर पर LINQ से XML के साथ किया जाता है। –

0

आप इस एक्सएमएल को एक नई कक्षा में deserialize कर सकते हैं! इस तरह कुछ कोशिश करें:

public static T DeserializeObject<T>(string filePath) 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(filePath); 
     XmlNodeReader reader = new XmlNodeReader(doc.DocumentElement); 
     XmlSerializer ser = new XmlSerializer(typeof(T)); 
     object obj = ser.Deserialize(reader); 

     return (T)obj; 
    } 
+0

वह नए ऑब्जेक्ट्स बनाने की तलाश में नहीं है। मुझे लगता है कि एक्सएमएल फ़ाइल की संरचना संकलन समय में ज्ञात नहीं है। वह नई कक्षाएं बनाने के लिए कह रहा है। –

+0

+1; मुझे नहीं लगता कि यह मूल प्रश्न से स्पष्ट है कि क्या पोस्टर एक नया प्रकार बनाना चाहता है, या सिर्फ मौजूदा प्रकार के लिए एक्सएमएल को deserialize करने के लिए। मुझे लगता है कि उत्तरार्द्ध अधिक संभावना है। – Polyfun

+0

@ शेलशॉक मैं केवल कुछ चीजों को एक्सएमएल के बारे में नहीं जानता लेकिन नोड्स उपयोगकर्ता जो भी नाम दे सकता है, कहें कि हमारे पास 4 नाम वाले व्यक्ति हैं! उस स्थिति में मैं स्ट्रिंग [] या जेनेरिक का उपयोग नहीं करना चाहता मुझे नाम 1 नाम 2 नाम 3 नाम 4 जैसे 4 स्ट्रिंग घोषित करने की आवश्यकता है। – Burimi

0

आपको जटिल चीज करने के लिए प्रतिबिंब एपीआई का उपयोग करना होगा। कृपया अपने परिदृश्य का वर्णन करें। शायद सरल दृष्टिकोण हैं।

0

मुझे वास्तव में समझ में नहीं आता है। चूंकि सी # दृढ़ता से टाइप किया गया है, इसलिए आपको संकलन प्रकार पर पता नहीं चल रहा है कि ऑब्जेक्ट कैसा दिखता है, इसलिए आप इसका उपयोग करने में सक्षम नहीं होंगे।

हो सकता है कि आप एक ऑब्जेक्ट बनाने से बेहतर हो जो कुंजी के नाम के साथ एक शब्दकोश का उपयोग करता है। फिर आप यह जानने के लिए शब्दकोश से पूछ सकते हैं कि उसके पास क्या गुण हैं।

+0

वैसे मेरा दोस्त मेरा एक्सएमएल मानदंड और उपयोगकर्ता है जो मेरे आवेदन का उपयोग करना चाहता है, उसका एक्सएमएल बनाना चाहिए, लेकिन आईएसएसयूई मैं एक कठोर मानदंड नहीं रखना चाहता हूं ताकि उपयोगकर्ता को पता चले कि क्या रखा जाए लेकिन कहां रखा जाए यदि मैं अपने प्रश्न में लक्ष्य तक पहुंच सकता हूं तो मूल्य और आइटम कोई मुद्दा नहीं होंगे! @ रे – Burimi

2

हाँ, यह है तक पहुँचने के लिए प्रतिबिंब की आवश्यकता होगी।

Here आप कैसे पा सकते हैं।

लेकिन इसके बजाय आप इस संरचना को मानचित्र में भी स्टोर कर सकते हैं, जहां कुंजी है और आईडी और मान एक अन्य मानचित्र है जो गुणों को संग्रहीत करता है जहां कुंजी नाम और मान मान है।

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