2008-09-17 13 views
28

में एक एक्सएमएल कैसे मैप करना चाहता हूं, मैं उन ऑब्जेक्ट्स को लोड करना चाहता हूं, उन ऑब्जेक्ट्स को मैनिपुलेट करें (मान सेट करें, मान पढ़ें) और फिर उन एक्सएमएल को वापस सहेजें। मेरे लिए बनाई गई संरचना (xsd) में XML होना मेरे लिए महत्वपूर्ण है।मैं एक्सएमएल से सी # ऑब्जेक्ट्स

ऐसा करने का एक तरीका अपना खुद का सीरियलाइज़र लिखना है, लेकिन क्या इसका उपयोग करने में सी या सी # में खुला स्रोत है जिसका उपयोग मैं कर सकता हूं?

उत्तर

28

आप एक स्कीमा (XSD) से serializable सी # वर्गों उत्पन्न xsd.exe का उपयोग कर सकते हैं:

xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir 

स्कीमा निर्भरता (शामिल/आयातित स्कीमा) है, तो वे सभी एक ही कमांड लाइन पर शामिल किया जाना चाहिए ।

+11

[+1] यह ध्यान देने योग्य है कि आपको XSD का उपयोग करते समय डेटासेट व्युत्पन्न कक्षा उत्पन्न करने के लिए या तो कक्षाएं उत्पन्न करने के लिए/c का उपयोग करना चाहिए। अन्यथा आपको निम्न त्रुटि संदेश मिलेगा "त्रुटि: केवल कक्षाओं या डेटासेट में से कोई एक उत्पन्न कर सकता है।"। – Marc

0

मैं शर्त लगाऊंगा कि NetDataContractSerializer आप जो चाहते हैं वह कर सकते हैं।

7

LINQ to XML यदि आप उपयोग कर रहे हैं तो बहुत शक्तिशाली है .नेट 3.5, LINQ to XSD आपके लिए भी उपयोगी हो सकता है!

+2

यह अब है XSD करने के लिए LINQ के आधिकारिक पृष्ठ: http://linqtoxsd.codeplex.com/ –

+0

के रूप में सवाल में कहा गया है कि यह वास्तव में सी # करने के लिए मानचित्रण करता है? – Konstantin

+0

नहीं, लिंक से एक्सएमएल का उपयोग निरंतर कक्षाओं के मानचित्र के लिए नहीं किया जा सकता है। –

2

उपयोग xsd.exe कमांड लाइन प्रोग्राम है जो दृश्य स्टूडियो वर्ग फ़ाइलों है कि आप अपनी परियोजना/समाधान में उपयोग कर सकते हैं बनाने के लिए, और System.Xml.Serialization नाम स्थान (विशेष रूप से, XmlSerializer वर्ग) के साथ आता है क्रमानुसार करने/उन deserialze डिस्क से और डिस्क से कक्षाएं।

2

System.Xml.Serialization का उपयोग कर; इस नेमस्पेस में आपके द्वारा आवश्यक सभी विशेषताओं की आवश्यकता होगी यदि आप अपने एक्सएमएल को किसी भी यादृच्छिक वस्तु पर मैप करना चाहते हैं। वैकल्पिक रूप से आप xsd.exe उपकरण

xsd file.xsd {/ classes |/डेटासेट} [/ तत्व: तत्व] [/ भाषा: भाषा] [/ नामस्थान: नामस्थान] [/ outputdir: निर्देशिका] [यूआरआई: यूरी] जो आपकी एक्सएसडी फाइलें लेगा और सी # या वीबीनेट कक्षाएं बाहर करेगा उनमें से।

http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx

18

इस कोड (सी # डॉटनैट 1.0 के बाद) एक्सएमएल के लिए सबसे अधिक वस्तुओं को क्रमानुसार करने काफी अच्छी तरह से काम करता है। (और पीछे) यह यदि संभव हो तो छड़ी केवल सरणी

using System;  
using System.IO; 
using System.Text; 
using System.Xml.Serialization; 
using System.Runtime.Serialization; 
using System.Runtime.Serialization.Formatters.Binary; 


public static string Serialize(object objectToSerialize) 
{ 
    MemoryStream mem = new MemoryStream();   
    XmlSerializer ser = new XmlSerializer(objectToSerialize.GetType());   
    ser.Serialize(mem, objectToSerialize);      
    ASCIIEncoding ascii = new ASCIIEncoding(); 
    return ascii.GetString(mem.ToArray()); 
}   

public static object Deserialize(Type typeToDeserialize, string xmlString) 
{ 
    byte[] bytes = Encoding.UTF8.GetBytes(xmlString); 
    MemoryStream mem = new MemoryStream(bytes);   
    XmlSerializer ser = new XmlSerializer(typeToDeserialize); 
    return ser.Deserialize(mem); 
} 
+1

हंडी दिनचर्या, लेकिन ध्यान दें कि यह उन ऑब्जेक्ट्स पर काम नहीं करेगा जिनके पास पैरामीटर रहित कन्स्ट्रक्टर नहीं है। – ChadD

+0

क्या हमें क्लास टाइप टू डीसेरियलाइज और उसके मेमबर्स पर किसी प्रकार का मैपिंग टैग लिखना है ??? –

+0

इससे हमें JSON.NET JSON और XML के बीच डेटाबेस में सहेजने में मदद मिली। JSON.NET ने एक्सएमएल नहीं बनाया है जिसे फिर से जेएसओएन पर फिर से मैप किया जा सकता है, यानी, हमने कभी भी एएसपी.NET के एक्सएमएल तरीकों के साथ जेनरेट किए गए एक्सएमएल का उपयोग करने का कोई तरीका नहीं निकाला। –

1

xsd.exe का उपयोग कर Microsoft से कीड़े का एक बहुत है करने के लिए वस्तुओं ArrayLists युक्त लिए काम नहीं करता है, और: | इस ओपन सोर्स मोती http://xsd2code.codeplex.com/

+0

+1 इसके लिए धन्यवाद। यह वास्तव में एक परियोजना है जो सक्रिय है और इसमें कुछ दस्तावेज हैं। – knownasilya

1

हमने एक ढांचा तैयार किया है जो आपके एक्सएमएल से सी # कक्षाओं को स्वत: उत्पन्न कर सकता है। यह एक विज़ुअल आइटम टेम्पलेट है जिसमें आप अपना एक्सएमएल पास करते हैं और कक्षाएं आपके प्रोजेक्ट में स्वचालित रूप से जेनरेट की जाती हैं। इन कक्षाओं का उपयोग करके आप अपने एक्सएमएल को बना/पढ़/लिख सकते हैं।

चेक ढांचे और विजुअल C# आइटम टेम्पलेट के लिए इस लिंक: click here

1

मैं मानता हूँ XSD वास्तव में बकवास है ... लेकिन वे एक और संस्करण है कि शायद ही किसी को भी के बारे में जानता बनाया है। इसे एक्सएसडी ऑब्जेक्ट जेनरेटर कहा जाता है। इसका अगला संस्करण है और इसके पास और विकल्प हैं। यह एक्सएसडी से फाइलें उत्पन्न करता है और शानदार काम करता है। यदि आपके पास एक्सएमएल जासूस की तरह एक स्कीमा जेनरेटर है; अपने एक्सएमएल से एक एक्सएसडी बनाएँ और इस उपकरण का उपयोग करें। मैंने इस टूल का उपयोग करके बहुत ही जटिल कक्षाएं बनाई हैं। फिर अतिरिक्त गुणों \ विधियों आदि के लिए आंशिक कक्षाएं बनाएं, फिर जब आप अपनी स्कीमा अपडेट करते हैं तो आप केवल अपनी कक्षाएं वापस लेते हैं और आपके आंशिक कक्षाओं में कोई भी संपादन जारी रहता है।

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7075

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