2009-10-13 10 views
8

मैं एक तृतीय पक्ष जावा आधारित आरईएसटी webservice के साथ काम कर रहा हूं, जो xmlNodes की एक सरणी देता है।xmlNode ऑब्जेक्ट्स

xmlNode [] एक वस्तु का प्रतिनिधित्व करता है और मैं ऑब्जेक्ट में xmlNode [] को deserialize करने का सबसे अच्छा तरीका काम करने की कोशिश कर रहा हूं? क्या यह पहले xmlDocument बनाने और Deserialize बनाने के लिए है?

धन्यवाद

उत्तर

22

आप WCF बाकी स्टार्टर किट पूर्वावलोकन स्थापित है, तो वहाँ एक साफ चाल है:

  • खुला दृश्य स्टूडियो
  • अपने XML नोड सामग्री (एक्सएमएल है कि आपके नोड्स में से एक का निर्माण करता है) का चयन करें और कॉपी यह क्लिपबोर्ड
  • दृश्य स्टूडियो में अपने "संपादन" मेनू से करने के लिए,

यह आपके एक्सएमएल एक सी # वर्ग है कि के रूप में अपने प्रोजेक्ट में क्लिपबोर्ड पर है कि पेस्ट जाएगा "प्रकार के रूप में चिपकाने के एक्सएमएल" लेने उस सटीक एक्सएमएल को deserializing करने में सक्षम। बहुत निफ्टी!

इसके बारे में इन ब्लॉग पोस्ट देखें:

है कि आप लिखने का बहुत बचाने के लिए और जीवन एक बहुत आसान बनाना चाहिए!

अद्यतन:
ठीक है, आप पहले से ही एक्सएमएल वापस पहुंचने से उत्पन्न अपनी कक्षाओं की है। अब आपको अपनी कक्षा में XmlNode रूपांतरित करने की आवश्यकता है।

आप कुछ इस तरह करना होगा:

private static T ConvertNode<T>(XmlNode node) where T: class 
{ 
    MemoryStream stm = new MemoryStream(); 

    StreamWriter stw = new StreamWriter(stm); 
    stw.Write(node.OuterXml); 
    stw.Flush(); 

    stm.Position = 0; 

    XmlSerializer ser = new XmlSerializer(typeof(T)); 
    T result = (ser.Deserialize(stm) as T); 

    return result; 
} 

आप एक धारा (यहाँ एक MemoryStream) को XmlNode की एक्सएमएल प्रतिनिधित्व (संपत्ति .OuterXml) लिखने और फिर XmlSerializer का उपयोग क्रमानुसार करने की जरूरत है उस धारा से वस्तु वापस।

आप सामान्य विधि के साथ यह कर सकते हैं और फोन

Customer myCustomer = ConvertNode<Customer>(xmlNode); 

या आप भी तो आप लिख सकते हैं XmlNode वर्ग पर या तो एक विस्तार विधि में है कि कोड बदल सकता है:

Customer myCustomer = xmlNode.ConvertNode<Customer>(); 

मार्क

+0

हाय, मेरे पास पहले से ही xsd से ऑब्जेक्ट्स हैं इसलिए मैं वास्तव में इस चरण को करने के लिए नहीं हूं। मैं सीखना चाहता हूं कि xmlNodes [] (serialized ऑब्जेक्ट) से जाने का सबसे अच्छा तरीका क्या है। – 76mel

-1

यह करने के लिए .NET में System.Xml.Serialization.XmlSerializer वर्ग में बनाया का उपयोग किया जाएगा सबसे आसान तरीका है। XmlSerializer पर एक Google खोज ट्यूटोरियल का एक टन प्रदान करेगी जिसका उपयोग आप एक ट्यूटोरियल खोजने के लिए कर सकते हैं जो आपके लिए काम करता है।

+1

स्पष्ट और उपयोगी नहीं। बेशक मुझे XMLSerializer की आवश्यकता है, लेकिन मेरे पास एक एक्सएमएल नोड है और स्ट्रिंग या स्ट्रीम नहीं है। सौभाग्य से, एक Google खोज इस प्रश्न के अन्य उपयोगी उत्तर प्रदान करती है – edc65

4

मई यहां जवाब देने में बहुत देर हो सकती है लेकिन इससे दूसरों की मदद मिलेगी:

यहां समाधान है कि आप XML नोड से Deserialize करने में सक्षम होंगे।

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml(xml); 

XmlNode xmlNode = xmlDoc.SelectSingleNode("//SystemInfo"); 

XmlSerializer serial = new XmlSerializer(typeof(SystemInfo)); 

SystemInfo syso =(SystemInfo)serial.Deserialize(new XmlNodeReader(xmlNode)); 

पहले लोड XmlDocument Object करने के लिए XML और उसके बाद माता पिता नोड आप deserialize करने के लिए सभी एक्सएमएल दस्तावेज़ से वैसे ही जैसे मैं चाहता हूँ SystemInfo वस्तु नोड इच्छा सकते हैं।

एक बार जब आप पाते हैं कि विशिष्ट श्रेणी प्रकार के साथ XmlSerializer ऑब्जेक्ट बनाएं, तो आप चाहेंगे।

अब बस deserialize विधि के लिए new XmlNodeReader(xmlNode) पारित, तो आप सिर्फ जैसे मैं एक्सएमएल मूल्यों के साथ syso वस्तु आबादी वाले वस्तुओं एक वर्ग वस्तु में आबादी वाले मिल जाएगा।

हैप्पी कोडिंग :)

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