2012-08-10 16 views
6

गतिशील रूप से बनाए गए ऑब्जेक्ट को xml स्ट्रिंग में क्रमबद्ध करने का कोई संभावित तरीका है?एक्सएमएल में अनामित टाइप किए गए ऑब्जेक्ट्स को क्रमबद्ध कैसे करें?

var foobar = new { foo = "bar" }; 
string xml = ConvertToXMLString(foobar); 
//xml should be something like : 
//<foo>bar</foo> 

मैं XmlSerializer और DataContractSerializer पर एक नज़र लेने में सक्षम था, लेकिन XmlSerializer ऑब्जेक्ट प्रकार की आवश्यकता है, जबकि DataContractSerializer गुण धारावाहिक की जरूरत है पर विशेषता की आवश्यकता है।

निराशा से बाहर, मैंने ऑब्जेक्ट को जेएसओएन में पहले परिवर्तित कर दिया और जेएसओएन से इसे एक्सएमएल में परिवर्तित कर दिया।

var foobar = new { foo = "bar" }; 
JavaScriptSerializer js = new JavaScriptSerializer(); 
jsonString = js.Serialize(values); 
//Json.NET at http://json.codeplex.com/ 
XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(jsonString); 
+0

"' dynamic' "वस्तुओं अलग हैं:' नए {} .. 'परिणाम एक स्थाई रूप से टाइप अभिव्यक्ति में। –

+1

इसे इंगित करने के लिए धन्यवाद। मैं शब्दावली के साथ मिश्रित हो गया। – xar

+0

जेएसओएन में कनवर्ट करने के लिए हैक पर अच्छी कॉल, फिर एक्सएमएल =) – madannes

उत्तर

5

मानक इनबिल्ट धारावाहिकों का उपयोग नहीं, नहीं; XmlSerializer सार्वजनिक प्रकार (जो अज्ञात प्रकार नहीं हैं) की मांग करता है, और केवल पढ़ने-लिखने वाले सदस्यों के लिए काम करता है (जो अज्ञात प्रकार नहीं है)। DataContractSerializer विशेषताएँ चाहता है (जो अनाम प्रकार नहीं है)।

स्पष्ट रूप से, सबसे सरल और सबसे अधिक सहायक "फिक्स" औपचारिक रूप से एक पॉको डीटीओ घोषित करना है जो आपके बाद के बाद मेल खाता है, उर्फ: यहां किसी अज्ञात प्रकार का उपयोग न करें। उदाहरण के लिए:

public class MyDto { 
    public string foo {get;set;} 
} 
... 
var foobar = new MyDto { foo = "bar" }; 

विकल्प होगा अनिवार्य रूप से अपनी खुद की एक्सएमएल serializer लेखन। वह ... मज़ा की तरह नहीं लगता है।

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