2009-07-24 12 views
8

मैंने ज्ञात प्रकारों के बारे में कई लेख पढ़े हैं और मुझे विश्वास है कि मेरा उदाहरण काम करना चाहिए। लेकिन ऐसा नहीं है। मुझे deserialization पर निम्नलिखित अपवाद मिल रहा है और समझ में नहीं आता क्यों:डेटाकंट्रैक्टसाइराइज़र, ज्ञात टाइप और विरासत

पंक्ति 1 स्थिति में त्रुटि 2. नामस्थान 'http://schemas.datacontract.org/2004/07/ConsoleApplication2' से तत्व 'ए' की अपेक्षा करना .. नाम 'सी', नामस्थान के साथ 'एलिमेंट' 'http://schemas.datacontract.org/2004/07/ConsoleApplication2'।

using System; 
using System.Runtime.Serialization; 
using System.Xml; 
using System.IO; 

namespace ConsoleApplication2 
{ 
    [DataContract][KnownType(typeof(C))]class A { } 
    [DataContract]class C : A { } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      A a = new C(); 
      string data; 

      var serializer = new DataContractSerializer(a.GetType()); 
      using (var sw = new StringWriter()) 
      { 
       using (var xw = new XmlTextWriter(sw)) 
        serializer.WriteObject(xw, a); 
       data = sw.ToString(); 
      } 

      serializer = new DataContractSerializer(typeof(A)); 
      using (var sr = new StringReader(data)) 
      using (var xr = new XmlTextReader(sr)) 
       a = (A)serializer.ReadObject(xr); 
     } 
    } 
} 

मुझे क्या याद आ रही है?

उत्तर

11

जिस तरह से आप धारावाहिक बनाते हैं उसे बदलें। उपयोग करें:

var serializer = new DataContractSerializer(typeof(A)); 

ए। गेट टाइप();

यह काम करता है। - XML ​​उत्पन्न होता है कि अलग है कुछ इस तरह था:

<C> ... 

और अब है:

<A i:type="C"> ... 
+1

धन्यवाद एक बहुत! यह सचमुच काम करता है। – UserControl

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