Why am I using the KnownType attribute wrong?
I am trying to deserialize a json response from a google api, so i thought i would define a couple classes to help with it:

    [DataContract]
    public class DetectionResult:ResponseData
    {
        [DataMember(Name="language")]
        public string Language
        { get; set; }

        [DataMember(Name="isReliable")]
        public bool IsReliable
        { get; set; }

        [DataMember(Name="confidence")]
        public double Confidence
        {get;set;}
    }

    [DataContract]
    public abstract class ResponseData
    {

        [DataMember(Name = "error")]
        public TranslationError Error
        { get; set; }

    }

    [DataContract]
    public class TranslationError
    {
        [DataMember(Name="code")]
        public int Code
        { get; set; }

        [DataMember(Name="message" )]
        public int Message
        { get; set; }
    }

    
    [DataContract]
    [KnownType(typeof(DetectionResult))]
    public class RequestResult
    {
        [DataMember(Name="responseStatus")]
        public int ResponseStatus
        { get; set; }

        [DataMember(Name="responseDetails")]
        public string ResponseDetails
        { get; set; }

        [DataMember(Name = "responseData")]
        public ResponseData Response
        { get; set; }
    }

The response I get after making the request is:

    {"responseData": {"language":"en","isReliable":false,"confidence":0.114892714}, "responseDetails": null, "responseStatus": 200}

and use this code to deserialize it:
    
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
      using (Stream stream = response.GetResponseStream())
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(RequestResult));

                RequestResult result = (RequestResult)serializer.ReadObject(stream);                

                stream.Close();
            }

But am getting an exception stating "Cannot create an abstract class".  Shouldnt it know about the DetectionResult class and properly deserialize it?
Why am I using the KnownType attribute wrong?
===

I am trying to deserialize a json response from a google api, so i thought i would define a couple classes to help with it:

    [DataContract]
    public class DetectionResult:ResponseData
    {
        [DataMember(Name="language")]
        public string Language
        { get; set; }

        [DataMember(Name="isReliable")]
        public bool IsReliable
        { get; set; }

        [DataMember(Name="confidence")]
        public double Confidence
        {get;set;}
    }

    [DataContract]
    public abstract class ResponseData
    {

        [DataMember(Name = "error")]
        public TranslationError Error
        { get; set; }

    }

    [DataContract]
    public class TranslationError
    {
        [DataMember(Name="code")]
        public int Code
        { get; set; }

        [DataMember(Name="message" )]
        public int Message
        { get; set; }
    }

    
    [DataContract]
    [KnownType(typeof(DetectionResult))]
    public class RequestResult
    {
        [DataMember(Name="responseStatus")]
        public int ResponseStatus
        { get; set; }

        [DataMember(Name="responseDetails")]
        public string ResponseDetails
        { get; set; }

        [DataMember(Name = "responseData")]
        public ResponseData Response
        { get; set; }
    }

The response I get after making the request is:

    {"responseData": {"language":"en","isReliable":false,"confidence":0.114892714}, "responseDetails": null, "responseStatus": 200}

and use this code to deserialize it:
    
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
      using (Stream stream = response.GetResponseStream())
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(RequestResult));

                RequestResult result = (RequestResult)serializer.ReadObject(stream);                

                stream.Close();
            }

But am getting an exception stating "Cannot create an abstract class".  Shouldnt it know about the DetectionResult class and properly deserialize it?