Let's assume I want to deserialize this (I've removed the namespaces to make things simpler):
<TextField>
<Caption>Location</Caption>
<Name>Location</Name>
</TextField>
TextField inherits from FormField, so in my class definition of FormField looks something like this:
[KnownType(typeof(TextField))]
[DataContract(Name = "FormField"]
public abstract class FormField
{
[DataMember]
public string Name { get; set; }
}
TextField class looks like this:
[DataContract(Name = "TextField")]
public class TextField : FormField
{
[DataMember]
public string Caption { get; set; }
}
I tried deserializing using this:
internal static FormField Deserialize(string xml)
{
var serializer = new DataContractSerializer(typeof(FormField)});
using (var backing = new StringReader(xml))
{
using (var reader = new XmlTextReader(backing))
{
return serializer.ReadObject(reader) as FormField;
}
}
}
I get a SerializationException: "Expecting element 'FormField'..."