DataContractSerializer, KnownType und Vererbung

Ich habe viele Artikel über bekannte Typen gelesen und glaube, mein Beispiel sollte funktionieren. Aber das tut es nicht. Ich erhalte die folgende Ausnahme bei der Deserialisierung und verstehe nicht, warum:

Fehler in Zeile 1, Position 2. Erwarten des Elements 'A' aus dem Namespace 'http://schemas.datacontract.org/2004/07/ConsoleApplication2'.. begegnet' Element 'mit Name' C ', Namespace'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);
        }
    }
}

Was vermisse ich?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage