Давайте предположим, что я хочу десериализовать это (я удалил пространства имен, чтобы упростить задачу):
<TextField>
<Caption>Location</Caption>
<Name>Location</Name>
</TextField>
TextField наследуется от FormField, поэтому в моем определении класса FormField выглядит примерно так:
[KnownType(typeof(TextField))]
[DataContract(Name = "FormField"]
public abstract class FormField
{
[DataMember]
public string Name { get; set; }
}
Класс TextField выглядит следующим образом:
[DataContract(Name = "TextField")]
public class TextField : FormField
{
[DataMember]
public string Caption { get; set; }
}
Я попытался десериализовать, используя это:
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;
}
}
}
Я получаю исключение SerializationException: «Ожидается элемент« FormField »... "