2011-02-11 12 views
8

मैंने किसी तृतीय पक्ष से बाकी एपीआई उपभोग करने के लिए एक एपीआई रैपर क्लास लाइब्रेरी बनाई है।सी # कई संभावित नामस्थानों के साथ desmlializing xml

यह तब तक काम कर रहा था जब तक कि उन्होंने हाल ही में अपने उत्पाद के नवीनतम संस्करण में एपीआई अपडेट नहीं किया और मूल तत्व में नामस्थान जोड़ा, अब मेरा deserialization कोड विफल हो रहा है।

मेरी वर्गों में से एक का एक उदाहरण:

[Serializable] 
[XmlRootAttribute(ElementName = "exit_survey_list")] 
public class SupportExitSurveyCollection : ApiResult { .... } 

अगर मैं नया नाम स्थान के लिए XmlRootAttribute में नाम स्थान संपत्ति लौटाए जाने के लिए सेट है, तो यह ठीक से फिर से काम करता है।

लेकिन मुझे एपीआई (नेमस्पेस्ड और नहीं) दोनों संस्करणों का समर्थन करने की आवश्यकता है क्योंकि मुझे यकीन नहीं है कि एपीआई का कौन सा संस्करण उपलब्ध होगा।

मैं इसे विभिन्न संस्करणों के लिए कक्षाओं को डुप्लिकेट किए बिना काम करना चाहता हूं, लेकिन यह सुनिश्चित नहीं है कि यह संभव है या नहीं।

किसी भी इनपुट/सलाह के लिए धन्यवाद।

उत्तर

1

मुझे नहीं लगता कि यह संभव है।

आप IXmlSerializable इंटरफ़ेस को कार्यान्वित कर सकते हैं, और स्वयं को क्रमबद्ध करने पर नियंत्रण कर सकते हैं - जो काम करेगा लेकिन संभवतः यह संभव नहीं है कि आप क्या चाहते हैं, क्योंकि आपको कोड में अपने आप को मैपिंग करने की आवश्यकता होगी।

एक और विकल्प संदेश को पूर्व-संसाधित करना होगा और यदि यह गुम है तो नामस्थान जोड़ना होगा। फिर आप एक deserialization प्रक्रिया हो सकती है।

+0

विचारों के लिए धन्यवाद, मैं प्री-प्रोसेसिंग मार्ग चला गया और किसी भी नेमस्पेस घोषणाओं को हटा दिया। मुझे लगता है कि यह भविष्य में काम करने की अनुमति देगा अगर वे नामस्थान को फिर से बदलने का फैसला करते हैं। – Adam

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