假設我要反序列化的(我已經刪除了命名空間,使事情變得更簡單):當我只知道一個祖先類的類型時,我該如何反序列化一個XML?
<TextField>
<Caption>Location</Caption>
<Name>Location</Name>
</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’......」
「TextField」是XML文件的根,還是「FormField」的根? – SwDevMan81 2011-02-24 21:46:44
TextField是根。 TextField從FormField繼承,所以TextField是一種FormField。 – 2011-02-25 10:05:18