पर फ़ाइल को deserialize फ़ाइल मेरे पास एक डेटा क्लास है जो DataContractSerializer
के साथ क्रमबद्ध है। वर्ग [DataContract]
विशेषता का उपयोग करता है जिसमें कोई स्पष्ट Namespace
घोषणा नहीं है। इस प्रकार, परिणामी xml फ़ाइल में नामस्थान कक्षा के नामस्थान के आधार पर उत्पन्न होता है।DataContractSerializer - नामस्थान बदलें और पुरानी नेमस्पेस
वर्ग मूल रूप से इस तरह दिखता है:
namespace XYZ
{
[DataContract]
public class Data
{
[DataMember(Order = 1)]
public string Prop1 { get; set; }
[DataMember(Order = 2)]
public int Prop2 { get; set; }
}
}
... और जिसके परिणामस्वरूप xml:
<?xml version="1.0" encoding="utf-8"?>
<Data xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/XYZ">
<Prop1>StringValue</Prop1>
<Prop2>11</Prop2>
</Data>
अब मैं (वास्तव में यह निकालने के लिए) वर्ग के नाम स्थान को बदलने के लिए बदलकर चाहते [DataContract]
[DataContract(Namespace = "")]
पर विशेषता। हालांकि, एक बार जब मैं ऐसा करता हूं तो पहले मूल नामस्थान के साथ क्रमबद्ध किया गया था, जिसके साथ अब deserialize नहीं है।
Error in line 1 position XXX. Expecting element 'Data' from namespace ''.. Encountered 'Element' with name 'Data', namespace 'http://schemas.datacontract.org/2004/07/XYZ'.
यह एकदम सही समझ में आता है: मैं निम्न अपवाद प्राप्त करते हैं। मैंने नामस्थान बदल दिया। आई 'म ओके विद दैट। हालांकि, ऐसा लगता है कि आगे बढ़ने के लिए DataContractSerializer
बताने का तरीका होना चाहिए और उस डेटा को deserialize करें, भले ही नामस्थान मेल नहीं खाते हैं।
आप डेटाकंट्रैक्ट विशेषता में नामस्थान के लिए खाली स्ट्रिंग निर्दिष्ट क्यों करना चाहते हैं? ऐसा करके आप क्या प्राप्त कर रहे हैं? –
मुझे कक्षा के सीएलआर नेमस्पेस से बंधे नहीं हैं; और यह वास्तव में यहाँ समस्या है। यह वर्ग अपने सीएलआर नेमस्पेस को बदल रहा है और मैं उस कार्यान्वयन विस्तार से बंधना नहीं चाहता हूं। मैं, निश्चित रूप से, एक एक्सएमएल नेमस्पेस मान परिभाषित कर सकता हूं जिसे मैं स्थिर रख सकता हूं। लेकिन इस कार्यान्वयन के लिए मुझे बस बनाम एक्सएमएल नेमस्पेस को हटाने का लाभ नहीं दिख रहा है। इसका उपयोग सरल फ़ाइल क्रमिकरण के लिए किया जा रहा है। – harlam357