これを逆シリアル化したいと仮定しましょう(物事を簡単にするために名前空間を削除しました):
<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'を期待しています...」